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

#python #wsgi #pyramid #paster #dotcloud

#python #wsgi #пирамида #paster #dotcloud

Вопрос:

Я пытаюсь развернуть некоторый код Пирамиды в 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' но это ничего не изменило.

Ответ №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 .