Базовый путь в конфигурации вставки

Я пытаюсь развернуть некоторый код 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.ini, relative_to=current_dir + '/appname', но это ничего не изменило.


person viraptor    schedule 05.05.2011    source источник


Ответы (1)


В DotCloud URL-адреса, начинающиеся с /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 не будет включать какую-либо специальную обработку путей, на тот случай, если они вам не нужны.

Между тем, если вы хотите увидеть конфигурацию nginx по умолчанию для вашей службы DotCloud, вы можете просто dotcloud ssh перейти к своей службе и проверить /etc/nginx/sites-enabled/default.

person jpetazzo    schedule 06.05.2011