Django-Foreman не может найти установленные модели
Я пытаюсь использовать Формана / Honcho для управления моим приложением Django на основе Procfile. Когда я запускаю приложение view the normal python manage.py runserver
, все работает нормально. Однако, когда я запускаю приложение через honcho start
или foreman start web
, я получаю эту ошибку:
11:59:31 system | web.1 started (pid=27959)
11:59:31 web.1 | [2016-04-26 11:59:31 -0700] [27959] [INFO] Starting gunicorn 19.4.5
11:59:31 web.1 | [2016-04-26 11:59:31 -0700] [27959] [INFO] Listening at: http://0.0.0.0:5000 (27959)
11:59:31 web.1 | [2016-04-26 11:59:31 -0700] [27959] [INFO] Using worker: sync
11:59:31 web.1 | [2016-04-26 11:59:31 -0700] [27962] [INFO] Booting worker with pid: 27962
11:59:31 web.1 | [2016-04-26 18:59:31 +0000] [27962] [ERROR] Exception in worker process:
11:59:31 web.1 | Traceback (most recent call last):
11:59:31 web.1 | File "/Library/Python/2.7/site-packages/gunicorn/arbiter.py", line 515, in spawn_worker
11:59:31 web.1 | worker.init_process()
11:59:31 web.1 | File "/Library/Python/2.7/site-packages/gunicorn/workers/base.py", line 122, in init_process
11:59:31 web.1 | self.load_wsgi()
11:59:31 web.1 | File "/Library/Python/2.7/site-packages/gunicorn/workers/base.py", line 130, in load_wsgi
11:59:31 web.1 | self.wsgi = self.app.wsgi()
11:59:31 web.1 | File "/Library/Python/2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
11:59:31 web.1 | self.callable = self.load()
11:59:31 web.1 | File "/Library/Python/2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
11:59:31 web.1 | return self.load_wsgiapp()
11:59:31 web.1 | File "/Library/Python/2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
11:59:31 web.1 | return util.import_app(self.app_uri)
11:59:31 web.1 | File "/Library/Python/2.7/site-packages/gunicorn/util.py", line 357, in import_app
11:59:31 web.1 | __import__(module)
11:59:31 web.1 | File "../wsgi.py", line 17, in <module>
11:59:31 web.1 | application = get_wsgi_application()
11:59:31 web.1 | File "/Library/Python/2.7/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
11:59:31 web.1 | django.setup()
11:59:31 web.1 | File "/Library/Python/2.7/site-packages/django/__init__.py", line 18, in setup
11:59:31 web.1 | apps.populate(settings.INSTALLED_APPS)
11:59:31 web.1 | File "/Library/Python/2.7/site-packages/django/apps/registry.py", line 85, in populate
11:59:31 web.1 | app_config = AppConfig.create(entry)
11:59:31 web.1 | File "/Library/Python/2.7/site-packages/django/apps/config.py", line 90, in create
11:59:31 web.1 | module = import_module(entry)
11:59:31 web.1 | File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
11:59:31 web.1 | __import__(name)
11:59:31 web.1 | ImportError: No module named django_messages
11:59:31 web.1 | [2016-04-26 18:59:31 +0000] [27962] [INFO] Worker exiting (pid: 27962)
11:59:31 web.1 | [2016-04-26 11:59:31 -0700] [27959] [INFO] Shutting down: Master
11:59:31 web.1 | [2016-04-26 11:59:31 -0700] [27959] [INFO] Reason: Worker failed to boot.
11:59:31 system | web.1 stopped (rc=3)
Это при попытке установить модуль django-message. У меня те же проблемы и с другими модулями. Я также сталкиваюсь с той же проблемой сdjango-webpack-loader . Я должен также упомянуть что я получаю ошибку как внутри virtualenv, так и при его деактивации.
Вот команда для установки django-сообщений:
$> pip install django-messages
Requirement already satisfied (use --upgrade to upgrade): django-messages in ./lib/python2.7/site-packages
Установленные Приложения;
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'my_app',
'django_messages',
)
Я не уверен, какую еще информацию я могу предоставить, чтобы помочь устранить неполадки, но основной вопрос заключается в том, как мне получить установленные приложения для работы с foreman / honcho?
1 ответ:
Босс и бригадир не использовать Python в исполняемый файл и библиотеки из своего виртуального окружения, и пока вы не включите ваш Procfile, для шефа, просто позвонив
python
будет использовать системные исполняемые и библиотеки.К сожалению, вы не можете просто вызвать
/path/to/virtualenv/bin/activate
как часть Procfile, потому что Honcho завершает работу, когда завершается один из подпроцессов, как описано в этом потоке выпуска Github. Однако вы можете выполнить этот скрипт и ваш скрипт python в одной подрешетке, используя оператор&&
чтобы связать их вместе:web: source venv/bin/activate && python manage.py
Кроме того, вам может повезти больше, если вы измените свою оболочку
wsgi.py
, чтобы явно использовать библиотеки virtualenv перед импортом приложения Django:# Activate your virtual env activate_env=os.path.expanduser("/path/to/virtualenv/bin/activate_this.py") execfile(activate_env, dict(__file__=activate_env))
Они должны выполняться перед импортом любых модулей (кроме
os
), чтобы убедиться, что приложение читает правильные библиотеки сайта.Наконец, Honcho сам поддерживает использование
.env
файлов наряду с Procfile, который настраивает среду запускаются процессы. Формат этого файла такой же, как и у любого скрипта bash. Вы могли бы использовать его .env-файл, чтобы задатьPYTHONPATH
иPYTHONHOME
для указания библиотек в вашем Virtualenv, а затем указать явный интерпретатор Python внутри Virtualenv из файла Procfile..env файл
PYTHONHOME=/path/to/virtualenv/lib/python2.7 PYTHONHOME=