我正试图让Falcon在Webfaction上运行。我并不是一个真正的网络专家,所以我很难理解这些应用程序是如何服务的。
我的Webfaction App设置为mod_wsgi 4.5.3/Python 2.7
在我看来,Falcon可以在任何WSGI服务器上运行。当我启动我的mod_wsgi服务器时,它是否自动配置为像Falcon这样的东西运行?或者我还需要安装像Gunicorn这样的东西吗?
当我设置我的webfaction应用程序时,我收到一个目录结构如下:
app/htdocs/index.py
在index.py文件中,我把在Falcon Tutorial
中找到的示例放在了里面。import falcon
class ThingsResource(object):
def on_get(self, req, resp):
"""Handles GET requests"""
resp.status = falcon.HTTP_200
resp.body = 'Hello world!'
# falcon.API instances are callable WSGI apps
wsgi_app = api = falcon.API()
# Resources are represented by long-lived class instances
things = ThingsResource()
# things will handle all requests to the '/things' URL path
api.add_route('/things', things)
我知道也有运行WSGI的说明,但这就是我的困惑所在-是webfaction服务器已经运行WSGI,还是我仍然需要像Gunicorn这样的东西,如果是这样-什么是最好的配置方法?我需要一个cron来继续运行Gunicorn吗?
谢谢!
更新:
我检查了错误日志,收到了一个WSGI错误,关于没有一个名为"application"的变量,
所以我改成:
wsgi_app = api = falcon.API()
:
application = falcon.API()
这清除了错误,但现在当我访问mydomain.com/things时,我得到一个错误404(未找到/不存在)。
所以,这让我回到了我最初的问题,下一步是什么?看起来好像url没有被正确路由,所以它很可能与httpd.conf文件或类似的东西有关-再次,这是我第一次尝试这样设置。
这就是答案(至少对于最初的问题,我敢打赌,在不久的将来,我将在同一项目中搞砸其他东西)。
基本上,我能够将教程代码放入Webfaction在设置应用程序时生成的index.py文件中。在域上挂载。所以,我的教程代码看起来像这样:
import falcon
class ThingsResource(object):
def on_get(self,req,resp):
resp.status = falcon.HTTP_200
resp.body = 'Hello World!'
api = application = falcon.API()
things = ThingsResource()
api.add_route('/things', things)
因为我找不到太多关于在Webfaction上启动一个Falcon应用程序的信息,我看了看类似的应用程序在Webfaction上是如何运行的(在这个例子中是Flask)。话虽如此,我在Flask文档中找到了一个片段,展示了如何在webfaction上进行设置。我不确定这是否意味着我的整个应用程序可以正常工作,但我知道至少Falcon教程代码可以正常工作。实际上,我只需要按照下面的说明编辑httpd.conf文件:
WSGIPythonPath /home/yourusername/webapps/yourapp/htdocs/
#If you do not specify the following directive the app *will* work but you will
#see index.py in the path of all URLs
WSGIScriptAlias / /home/yourusername/webapps/yourapp/htdocs/index.py
<Directory /home/yourusername/webapps/yourapp/htdocs/>
AddHandler wsgi-script .py
RewriteEngine on
RewriteBase /
WSGIScriptReloading On
</Directory>
我希望这对任何有类似问题的人有所帮助。