Одно приложение с именем «MyApp» завершает работу из-за сбоя Plone

#crash #plone

#сбой #plone

Вопрос:

Я использовал команду «paster», которая находится в каталоге «bin /» папки экземпляра моего Plone, чтобы создать приложение plone (из шаблона) с именем «MyApp» — команда была:

 (from instance's root folder):> ./bin/paster create -t plone_app
  

Когда меня спросили имя, я дал ему «MyApp». Я скопировал это в папку «src /» и зарегистрировал его в файле «buildout.cfg» и запустил buildout. У меня этот процесс работает для других приложений с другими именами, однако кажется, что это конкретное приложение всегда завершает работу с Plone. Когда я захожу на свой сайт, все, что я получаю, это Zope (и не могу получить доступ к Plone). Есть ли причина, почему? Является ли «MyApp» зарезервированным пространством имен для чего-то другого, что вызывает сбой?

Я должен также отметить, что имя «myapp» работает просто отлично…

Комментарии:

1. Как происходит сбой? Если вы видите Zope, ничего не произошло сбоя. Вы получаете какие-либо ошибки?

Ответ №1:

Когда я пробую эту команду, она запускается следующим образом:

 $ paster create -t plone_app
Selected and implied templates:
  ZopeSkel#nested_namespace  A basic Python project with a nested namespace (2 dots in name)
  ZopeSkel#plone_app         A project for Plone products with a nested namespace (2 dots in name)
  

Это означает, что вместо MyApp вы должны выбрать имя с двумя точками, например plone.app.mine. Когда вы просто указываете MyApp в качестве имени проекта, это, по-видимому, создает пакет MyApp.plone.MyApp.

Да, было бы лучше, если бы paster (zopeskel) выдавал здесь ошибку.

На самом деле, когда я заполняю здесь MyApp и использую его на сайте Plone 4, оно действительно запускается. Поэтому это может помочь вставить точную обратную трассировку, которую вы получаете. Но, вероятно, лучше всего выбрать название получше.

Сам Plone использует вложенные пространства имен для некоторых пакетов (например, plone.app.locales). Для ваших собственных проектов я бы сказал, что это перебор. Вместо этого попробуйте использовать ‘paster create -t plone’, который ожидает имя, подобное my.app или clientname.theme.

Ответ №2:

Стоит отметить (особенно в отношении ответа Maurits), что если вы используете скрипт ‘zopeskel’ вместо paster, например:

 bin/zopeskel plone_app MyApp
  

Вы получите сообщение об ошибке, в котором говорится, что вам нужно имя с двумя точками. Это одна из основных причин использования скрипта ‘zopeskel’ вместо команды paster. При установке zopeskel у вас должен быть bin / zopeskel рядом с bin / paster. Используйте его, и вы получите улучшенные сообщения об ошибках и встроенную справку.

Ответ №3:

Работает для меня:

 aclark@Alex-Clarks-MacBook-Pro:~/Developer/test-4.1/src/ > paster create -t plone_app MyApp
Selected and implied templates:
  ZopeSkel#nested_namespace  A basic Python project with a nested namespace (2 dots in name)
  ZopeSkel#plone_app         A project for Plone products with a nested namespace (2 dots in name)

Variables:
  egg:      MyApp
  package:  myapp
  project:  MyApp
Expert Mode? (What question mode would you like? (easy/expert/all)?) ['easy']: 
Version (Version number for project) ['1.0']: 
Description (One-line description of the project) ['']: 
Creating template nested_namespace
Creating directory ./MyApp
  Recursing into  namespace_package 
    Creating ./MyApp/MyApp/
    Recursing into  namespace_package2 
      Creating ./MyApp/MyApp/plone/
      Recursing into  package 
        Creating ./MyApp/MyApp/plone/MyApp/
        Copying __init__.py_tmpl to ./MyApp/MyApp/plone/MyApp/__init__.py
      Copying __init__.py_tmpl to ./MyApp/MyApp/plone/__init__.py
    Copying __init__.py_tmpl to ./MyApp/MyApp/__init__.py
  Copying README.txt_tmpl to ./MyApp/README.txt
  Recursing into docs
    Creating ./MyApp/docs/
    Copying HISTORY.txt_tmpl to ./MyApp/docs/HISTORY.txt
  Copying setup.py_tmpl to ./MyApp/setup.py
Creating template plone_app
  Recursing into  namespace_package 
    Recursing into  namespace_package2 
      Recursing into  package 
Replace 0 bytes with 86 bytes (0/0 lines changed; 3 lines added)
        Copying __init__.py_tmpl to ./MyApp/MyApp/plone/MyApp/__init__.py
        Copying configure.zcml_tmpl to ./MyApp/MyApp/plone/MyApp/configure.zcml
        Copying tests.py_tmpl to ./MyApp/MyApp/plone/MyApp/tests.py
        Copying version.txt_tmpl to ./MyApp/MyApp/plone/MyApp/version.txt
  Recursing into docs
    Copying INSTALL.txt_tmpl to ./MyApp/docs/INSTALL.txt
    Copying LICENSE.GPL to ./MyApp/docs/LICENSE.GPL
    Copying LICENSE.txt_tmpl to ./MyApp/docs/LICENSE.txt
Replace 890 bytes with 973 bytes (0/32 lines changed; 4 lines added)
  Copying setup.py_tmpl to ./MyApp/setup.py
  

При сборке:

 aclark@Alex-Clarks-MacBook-Pro:~/Developer/test-4.1/ > cat buildout.cfg 
[buildout]
extends = http://dist.aclark.net/build/plone/4.1.x/develop.cfg
develop = src/MyApp

[plone]
eggs  = 
    MyApp
  

Очевидно, что это не тот результат, которого вы ожидаете, хотя пастер создал пакет с тройным вложенным пространством имен под названием «MyApp.plone.MyApp» 🙂

Дополнительное примечание: это приложение не будет отображаться в надстройках в Plone, если вы не добавите профиль GenericSetup в MyApp / plone / MyApp /configure.zcml следующим образом:

 <configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:five="http://namespaces.zope.org/five"
    xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
    i18n_domain="MyApp.plone.MyApp">

  <five:registerPackage package="." initialize=".initialize" />

  <genericsetup:registerProfile
      name="default"
      title="MyApp"
      directory="profiles/default"
      description="MyApp"
      provides="Products.GenericSetup.interfaces.EXTENSION"
  />

</configure>
  

Тогда вы должны увидеть:

введите описание изображения здесь

Наконец, нет ничего «неправильного» в пакетах, отличных от пространства имен, они просто условны (с плюсами / минусами по сравнению с пакетами с плоским пространством имен, и наоборот). Смотрите:

для примера «плоского» пакета Plone с пространством имен.