K99*_*997 4 python apache mod-wsgi amazon-ec2 flask
我真的在这里挣扎.我有一个简单的Python Flask REST API,我已经开发了.API在我的本地开发环境(Mac OS X)中运行良好,并且在我的EC2实例上通过控制台直接执行.
我想将此服务转移到生产中,因此希望将其托管在EC2实例上运行的Apache之后.这是我不断碰壁的地方,我似乎无法通过配置和错误.我在网上研究了几篇文章和问题,似乎没有人能够帮助我.
我希望有人在这里可以为我提供有关如何在Amazon Linux EC2实例上运行的Apache后面部署我的服务的分步指导.
以下是我采取的步骤:
现在我知道我的实例正在运行,我想创建两个文件夹,我可以测试并运行我的Python Flask代码.我这样做如下:
现在这是我被绊倒的地方.我的目标是能够访问api.example.com并让我的服务根加载.在下面的示例代码中,"Hello,World!" 应该只是显示.
我按照这里找到的教程没有运气.
http://peatiscoding.me/geek-stuff/mod_wsgi-apache-virtualenv/
http://webpy.org/cookbook/mod_wsgi-apache
http://www.jakowicz.com/flask-apache-wsgi/
执行上述任何文章中的任何步骤后,我都会收到一个HTTP错误页面,并且不再加载任何内容,包括默认的Amazon Linux AMI测试页面.以下是我更改过的代码和配置.我没有改变我的httpd.conf ......我应该吗?可能还有其他一些我缺少的东西.
有人可以帮我提供详细的必要步骤来纠正我的错误吗?
提前谢谢了!
当我查看HTTPD的error_log时,它会列出如下错误:
mod_wsgi (pid=8270): Target WSGI script '/var/www/rest-dev/deploy.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=8270): Exception occurred processing WSGI script '/var/www/rest-dev/deploy.wsgi'.
Traceback (most recent call last):
File "/var/www/rest-dev/deploy.wsgi", line 16, in <module>
from app import app as application
File "/var/www/rest-dev/app.py", line 2, in <module>
from flask import Flask
ImportError: No module named flask
Run Code Online (Sandbox Code Playgroud)
这是我的deploy.wsgi文件,位于rest-dev文件夹中:
import os
import sys
import site
# Add virtualenv site packages
site.addsitedir(os.path.join(os.path.dirname(__file__), 'env/local/lib64/python2.7/site-packages'))
# Path of execution
sys.path.append('/var/www/rest-dev')
# Fired up virtualenv before include application
activate_env = os.path.expanduser(os.path.join(os.path.dirname(__file__), 'env/bin/activate_this.py'))
execfile(activate_env, dict(__file__=activate_env))
# import my_flask_app as application
from app import app as application
Run Code Online (Sandbox Code Playgroud)
这是我在/etc/httpd/conf.d/中的vhost.conf文件
<VirtualHost *:80>
ServerName api.example.com
WSGIDaemonProcess webtool user=ec2-user group=www threads=5 home=/var/www/rest-dev/
WSGIScriptAlias / /var/www/rest-dev/deploy.wsgi
<directory /var/www/rest-dev>
WSGIProcessGroup webtool
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
Order deny,allow
Allow from all
</directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这是我的app.py示例服务代码供参考:
#!env/bin/python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello, World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
Run Code Online (Sandbox Code Playgroud)
事实证明,在我的deploy.wsgi文件中,我引用的是lib64,而不仅仅是lib.所有站点包都存在于lib中.
更改它并重新启动Apache后,我能够从URL成功访问我的服务.
| 归档时间: |
|
| 查看次数: |
4538 次 |
| 最近记录: |