我正在尝试向dotcloud部署一些金字塔代码。不幸的是,有些路径的映射方式与本地粘贴部署中的不同。当我通过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.inirelative_to=current_dir + '/appname',但没有改变什么。

最佳答案

在DotCloud上,以/static开头的url直接由nginx处理,而不是由uwsgi处理。这意味着您的代码将永远看不到这些请求:它们将直接从应用程序的static/子目录中服务。
一种可能的解决方法是设置一个从staticappname/static的符号链接。
如果您不想用这样的符号链接扰乱存储库,可以使用postinstall脚本:

#!/bin/sh
# This creates the symlink required by DotCloud to serve static content from nginx
ln -s ~/current/appname/static ~/current/static

symlink很漂亮,但是postinstall脚本让您有机会在文件中插入注释,以解释其用途:-)
未来的DotCloud版本可能会提供一个“裸配置”切换,nginx配置不会包含任何特殊的路径处理,以防您不需要它们。
同时,如果您想查看您的DotCloud服务的nginx默认配置,您只需dotcloud ssh到您的服务,并检查/etc/nginx/sites-enabled/default

10-06 07:17