2

我正在尝试将一些 Pyramid 代码部署到 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'但这并没有改变任何东西。

4

1 回答 1

4

在 DotCloud 上,以 开头的 URL/static由 nginx 直接处理,而不是由 uwsgi 处理。这意味着您的代码将永远不会看到这些请求:它们将直接从static/您的应用程序的子目录中提供。

一种可能的解决方法是设置从staticto的符号链接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.

于 2011-05-06T06:11:14.593 回答