2016-12-01 3 views
1

Первый раз, используя Heroku здесь. Я хочу разместить приложение Flask для python. Вид начинается с того, как все работает. Я хотел бы, чтобы проверить мое приложение локально с помощью команды heroku local, но я получаю эту ошибку:Как проверить приложение python Heroku локально? ImportError: Нет модуля с именем wsgi

ImportError: No module named wsgi

Вот мои файлы:

PROCFILE:

web: gunicorn choposcope.wsgi --log-file - 

myapp.wsgi :

from choposcope import app as application 

Ошибка трассировки стека:

[2016-12-01 18:36:21 +0100] [9916] [INFO] Starting gunicorn 19.6.0 
6:36:21 PM web.1 | [2016-12-01 18:36:21 +0100] [9916] [INFO] Listening at: http://0.0.0.0:5000 (9916) 
6:36:21 PM web.1 | [2016-12-01 18:36:21 +0100] [9916] [INFO] Using worker: sync 
6:36:21 PM web.1 | [2016-12-01 18:36:21 +0100] [9919] [INFO] Booting worker with pid: 9919 
6:36:34 PM web.1 | [2016-12-01 18:36:34 +0100] [9919] [ERROR] Exception in worker process 
6:36:34 PM web.1 | Traceback (most recent call last): 
6:36:34 PM web.1 | File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/arbiter.py", line 557, in spawn_worker 
6:36:34 PM web.1 |  worker.init_process() 
6:36:34 PM web.1 | File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/workers/base.py", line 126, in init_process 
6:36:34 PM web.1 |  self.load_wsgi() 
6:36:34 PM web.1 | File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/workers/base.py", line 136, in load_wsgi 
6:36:34 PM web.1 |  self.wsgi = self.app.wsgi() 
6:36:34 PM web.1 | File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi 
6:36:34 PM web.1 |  self.callable = self.load() 
6:36:34 PM web.1 | File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load 
6:36:34 PM web.1 |  return self.load_wsgiapp() 
6:36:34 PM web.1 | File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp 
6:36:34 PM web.1 |  return util.import_app(self.app_uri) 
6:36:34 PM web.1 | File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/util.py", line 357, in import_app 
6:36:34 PM web.1 |  __import__(module) 
6:36:34 PM web.1 | ImportError: No module named wsgi 
6:36:34 PM web.1 | [2016-12-01 18:36:34 +0100] [9919] [INFO] Worker exiting (pid: 9919) 
6:36:34 PM web.1 | [2016-12-01 18:36:34 +0100] [9916] [INFO] Shutting down: Master 
6:36:34 PM web.1 | [2016-12-01 18:36:34 +0100] [9916] [INFO] Reason: Worker failed to boot. 
[DONE] Killing all processes with signal null 
6:36:34 PM web.1 Exited with exit code 3 

Кроме того, я не знаю, должен ли модуль wsgi быть установлен по умолчанию с помощью фляжки. Когда я пытаюсь запустить pip install mod_wsgi в моей виртуальной среде, я получаю эту ошибку:

pip install mod_wsgi 
Collecting mod_wsgi 
    Using cached mod_wsgi-4.5.9.tar.gz 
    Complete output from command python setup.py egg_info: 
    Traceback (most recent call last): 
     File "<string>", line 1, in <module> 
     File "/private/var/folders/_1/bhy3l2kj5l36_859j956y87m0000gn/T/pip-build-h3zlPa/mod-wsgi/setup.py", line 284, in <module> 
     APR_INCLUDES = get_apr_includes().split() 
     File "/private/var/folders/_1/bhy3l2kj5l36_859j956y87m0000gn/T/pip-build-h3zlPa/mod-wsgi/setup.py", line 245, in get_apr_includes 
     stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
     File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__ 
     errread, errwrite) 
     File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child 
     raise child_exception 
    OSError: [Errno 2] No such file or directory 

    ---------------------------------------- 
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/_1/bhy3l2kj5l36_859j956y87m0000gn/T/pip-build-h3zlPa/mod-wsgi/ 
+0

Как вы установили герою? – daphtdazz

+0

Не уверен, что заставляет вас думать, что вам нужен Apache; Heroku не использует его вообще, и это, конечно же, не требуется в разработке. Но вы не дали * почти * достаточно информации для нас, чтобы ответить на вопрос. Как выглядит ваша структура проекта? Вы в виртуальном мире? Какие библиотеки вы установили? Что находится в вашем procfile? И, что самое важное, что говорит * полная * ошибка трассировки? –

+0

Я добавил детали, которые вы просили. Все находится в одной папке. – ypicard

ответ

2

Из командной строки вы дали, gunicorn ожидает вас есть файл с именем:

choposcope/wsgi.py 

Вы не указали структуру своего каталога и файла, но ошибка указывает, что такой файл не существует.

Хотя есть способ установить mod_wsgi-express на Heroku, я бы не рекомендовал его, так как этот механизм не активно поддерживается.

Если вы намерены использовать gunicorn для локального развития в соответствии с тем, что используется на Heroku, вам также не нужно устанавливать mod_wsgi-express, хотя нет причин, по которым вы не можете использовать mod_wsgi-express для разработки, если вы хотели как mod_wsgi-express (а не ручная конфигурация Apache/mod_wsgi) так же легко для локальной разработки, как и другие доступные опции.

Не зная точно, какую структуру файловой системы вы используете, я предполагаю, что вам нужно переименовать файл myapp.wsgi в wsgi.py. Затем измените Procfile иметь:

web: gunicorn wsgi --log-file - 

wsgi аргументом является имя модуля Python, и, таким образом, почему файл должен называться wsgi.py. При использовании gunicorn он ожидает, что точка входа приложения WSGI будет application по умолчанию. Вы могли бы также, возможно, сошли без файла wsgi.py и используются:

web: gunicorn choposcope:app --log-file - 

Как почему pip install mod_wsgi сбоя при попытке установить его на месте, что, вероятно, из-за того на MacOS X и не имея команду разработчиков Xcode линейных инструментов.Это или у вас есть сломанная или неполная установка Apache httpd в HomeBrew.

+0

Смена имени на wsgi.py сделала трюк. Большое спасибо. – ypicard

1

Вы не должны загрузить его, вы должны создать его.

содержимого файла должен быть:

from yourapplication import app as application 

Для получения дополнительной информации см КОЛБЫ документации: http://flask.pocoo.org/docs/0.11/deploying/mod_wsgi/#creating-a-wsgi-file

+0

Ошибка изменилась, но для импорта все еще нужен модуль wsgi. Где это должно быть? Я не знаю, должен ли он быть установлен по умолчанию с флягой, но если я попытаюсь запустить pip install mod_wsgi в своей виртуальной среде, он терпит неудачу. Я добавлю ошибку в сообщение. – ypicard

 Смежные вопросы

  • Нет связанных вопросов^_^