我正在尝试将一些金字塔代码部署到dotcloud。遗憾的是,某些路径的映射方式与本地paster部署中的映射方式不同。当我通过paster serve ...
运行本地服务器的开发配置时,我可以访问配置为的静态文件:
config.add_static_view('static', 'appname:static')
但是在dotcloud服务器上,当脚本通过以下wsgi.py
:
import os, sys
from paste.deploy import loadapp
current_dir = os.path.dirname(__file__)
application = loadapp('config:production.ini', relative_to=current_dir)
在错误的目录中搜索静态内容。它应该放在/home/dotcloud/current/static/pylons.css
/home/dotcloud/current/appname/static/pylons.css
是否有部分wsgi配置可以定义基目录?我错过了什么?该应用程序通过nginx
/ uwsgi
运行。
我尝试加载config:../production.ini
,relative_to=current_dir + '/appname'
,但这并未改变任何内容。
答案 0 :(得分:4)
在DotCloud上,以/static
开头的网址由nginx直接处理,而不是由uwsgi处理。这意味着您的代码永远不会看到这些请求:它们将直接从您的应用程序的static/
子目录中提供。
一种可能的解决方法是设置从static
到appname/static
的符号链接。
如果您不希望使用这样的符号链接来混淆您的存储库,则可以改为使用postinstall
脚本:
#!/bin/sh
# This creates the symlink required by DotCloud to serve static content from nginx
ln -s ~/current/appname/static ~/current/static
符号链接很流畅,但是postinstall
脚本让你有机会在文件中放入注释,以解释它的用途: - )
DotCloud的未来版本可能提供“裸配置”切换,其中nginx配置将不包括任何特殊路径处理,以防您不需要它们。
同时,如果您想查看DotCloud服务的nginx默认配置,您只需dotcloud ssh
到您的服务,并检查/etc/nginx/sites-enabled/default
。