在 Ubuntu 14.04 VPS (Digital Ocean) 上部署 Flask 应用程序的问题

Posted

技术标签:

【中文标题】在 Ubuntu 14.04 VPS (Digital Ocean) 上部署 Flask 应用程序的问题【英文标题】:Issues with Deploying Flask app on Ubuntu 14.04 VPS (Digital Ocean) 【发布时间】:2014-06-20 13:11:13 【问题描述】:

我在本地开发了一个很棒的 Flask 应用程序。现在似乎无法在我的一生中部署。

我收到带有以下错误日志的内部服务器错误:

[2014 年 5 月 3 日星期六 22:24:11.355281] [:error] [pid 17560:tid 139814473037568] [client 68.40.196.121:52221] mod_wsgi (pid=17560): Target WSGI script '/var/www/dhh/dhh. wsgi' 不能作为 Python 模块加载。 [2014 年 5 月 3 日星期六 22:24:11.35538​​0] [:error] [pid 17560:tid 139814473037568] [client 68.40.196.121:52221] mod_wsgi (pid=17560): 处理 WSGI 脚本'/var/www/dhh/ 时发生异常dhh.wsgi'。 [2014 年 5 月 3 日星期六 22:24:11.355467] [:error] [pid 17560:tid 139814473037568] [client 68.40.196.121:52221] Traceback(最近一次通话最后): [2014 年 5 月 3 日星期六 22:24:11.355541] [:error] [pid 17560:tid 139814473037568] [client 68.40.196.121:52221] 文件“/var/www/dhh/dhh.wsgi”,第 7 行,在 [Sat May 03 22:24:11.355754 2014] [:error] [pid 17560:tid 139814473037568] [client 68.40.196.121:52221] from dhh.app import app as application [2014 年 5 月 3 日星期六 22:24:11.355815] [:error] [pid 17560:tid 139814473037568] [client 68.40.196.121:52221] ImportError: No module named dhh.app

当前文件结构树:

/dhh |--/应用 |--------/静态 |--------/模板 |--------__init__.py |--------views.py |--/烧瓶 |--------/bin |--------/包括 |--------/库 |--------/本地 |--/tmp

相关文件

    __init__.py
从烧瓶进口烧瓶 app = Flask(__name__) 从应用导入视图 如果 __name__ == "__main__": 应用程序运行()
    views.py
从应用导入应用 @app.route('/') @app.route('/index') 定义索引(): 返回“你好,世界!这最好尽快开始工作。”
    /etc/apache2/sites-available/dhh.conf

ServerName davidhagan.me ServerAdmin david@davidhhagan.com WSGIScriptAlias / /var/www/dhh/dhh.wsgi Order allow,deny Allow from all Alias /static /var/www/dhh/dhh/app/static Order allow,deny Allow from all ErrorLog $APACHE_LOG_DIR/error.log LogLevel warn CustomLog $APACHE_LOG_DIR/access.log combined

    dhh.wsgi
#!/usr/bin/python 导入系统 导入日志 logging.basicConfig(流=sys.stderr) sys.path.insert(0,"/var/www/dhh/") 从 dhh.app 导入应用程序作为应用程序 application.secret_key = '超级密钥'

虽然这是一个非常空的应用程序版本,但它似乎导致了错误。我确信这是如何设置 apache 服务器的一个简单错误,但无法通过其他 SO Q/A 弄清楚。我不仅想知道如何解决这个问题,还想知道为什么会这样!

更新/解决方案

我最终需要更改路径以及调用模块的方式。

sys.path.insert(0, "/var/www/dhh/")

变成

sys.path.insert(0, "/var/www/dhh/dhh/")

从 dhh.app 导入应用程序作为应用程序

变成

从应用导入应用作为应用

【问题讨论】:

这可能是 How to solve import errors while trying to deploy Flask using WSGI on Apache2 的副本——要记住的关键是 Python 导入了它可以在 sys.path(和 a few other places)中找到的内容——如果你的应用不在 Python 的 @ 987654329@它不会找到它。 感谢链接,由于某种原因,我搜索时没有弹出该问题。结合下面的答案,我得到了它的工作。更新的问题。 【参考方案1】:

代替:

from dhh.app import app as application

使用:

from app import app as application

【讨论】:

不幸的是,更改此设置在错误日志中留下了相同的错误。 推测您可能没有重新启动 Apache,因为如果错误仍然准确引用“从 dhh.app 导入应用程序作为应用程序”,那么它没有看到代码更改。

以上是关于在 Ubuntu 14.04 VPS (Digital Ocean) 上部署 Flask 应用程序的问题的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu 14.04配置虚拟主机

Ubuntu #Apache2 Ubuntu 14.04 LTS系统中设置Apache虚拟主机

ubuntu4.04服务器添加虚拟主机

Nodejs异步功能不适用于每个功能[重复]

text 在ubuntu VPS上烧瓶

如何在Ubuntu VPS下配置VPN