运行flask run
时,我有一个烧瓶应用程序在本地计算机上运行,但未在AWS EC2中运行。
python-dotenv
和.flaskenv
文件,并设置为
开发和调试。flask run
两者都在同一个文件夹中。.flaskenv
中定义了端口,可以看到该端口已定义
两者都在烧瓶中运行。当我尝试获取相同的URL时,在EC2中出现错误:NoAppException: Could not import "app.initialize"
在本地计算机上运行:
$ flask run
* Serving Flask app "app.initialize:web_app" (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://0.0.0.0:5324/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 179-083-368
日志:
127.0.0.1 - - [07/Mar/2019 09:10:13] "GET /api/directors/me/info HTTP/1.0" 200 -
运行联合国EC2:
$ flask run
* Serving Flask app "app.initialize:web_app" (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://0.0.0.0:5324/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 104-758-876
日志:
127.0.0.1 - - [07/Mar/2019 12:05:42] "GET /api/directors/me/info HTTP/1.0" 500 -
Traceback (most recent call last):
File "/home/myuser/.virtualenvs/myvenv/lib/python2.7/site-packages/flask/cli.py", line 325, in __call__
self._flush_bg_loading_exception()
File "/home/myuser/.virtualenvs/myvenv/lib/python2.7/site-packages/flask/cli.py", line 313, in _flush_bg_loading_exception
reraise(*exc_info)
File "/home/myuser/.virtualenvs/myvenv/lib/python2.7/site-packages/flask/cli.py", line 302, in _load_app
self._load_unlocked()
File "/home/myuser/.virtualenvs/myvenv/lib/python2.7/site-packages/flask/cli.py", line 317, in _load_unlocked
self._app = rv = self.loader()
File "/home/myuser/.virtualenvs/myvenv/lib/python2.7/site-packages/flask/cli.py", line 371, in load_app
app = locate_app(self, import_name, name)
File "/home/myuser/.virtualenvs/myvenv/lib/python2.7/site-packages/flask/cli.py", line 246, in locate_app
'Could not import "{name}".'.format(name=module_name)
NoAppException: Could not import "app.initialize".
对于这个应用程序,我有一个自定义的flask命令,当我尝试在两种环境下调用此命令时,在本地计算机上都可以正常工作,但是在EC2中我遇到了No such command
错误。
我真的尝试了在SO中找到的所有有关检查事物是否正确导入,软件包版本等的内容。在EC2中,当我ipython
时,我可以import app.initialize
,甚至可以导入模型并使用我的应用程序代码来运行程序,包括命令功能。
最后,如果我在EC2中使用Gunicorn运行该应用程序,则可以正常工作,但有时我需要使用flask运行以进行调试(在沙箱环境中),并且还需要运行自定义命令。
您知道EC2可能有什么问题吗?
全部收录
答案 0 :(得分:1)
您需要将app
的路径添加到ec2的python路径。如果您在项目目录中,请运行export PYTHONPATH="$(pwd):$PYTHONPATH"
。
基本上,如果您的项目在文件系统中看起来像这样:
/home
/myuser
/myproject
/app
__init__.py
somemodule.py
然后,您要在环境变量/home/myuser/myproject
中包含PYTHONPATH
。
您将要自动执行此操作,因为该环境变量仅会在您运行命令的外壳程序中出现。为此,您可以使用以下一些可能的选项:
PYTHONPATH
的图像,并确保将项目放在路径中。~/.profile
,如果您只是想为应用程序添加路径,则可以将导出命令添加到/etc/profile
。所有用户。然后重新启动服务器。但是在为此担心之前,请按照以下步骤测试解决方案的正确性:
python
import app.initialize
app