запуск скриптов Python как часть процесса установки rpm

Есть ли какие-либо ошибки, о которых я должен знать при запуске сценариев Python из установки rpm?

Вот суть проблемы. Мы создали собственный установщик RPM для развертывания нашего приложения Django. В рамках процесса установки я хочу запустить команду управления Django, которая собирает все статические файлы и копирует их в предопределенное место. Вот как это выглядит при запуске вручную из командной строки:

$ python2.6 manage.py collectstatic --noinput
/usr/lib/python2.6/site-packages/reversion/__init__.py:31: UserWarning: django-reversion 1.5 is intended for use with django 1.3.0. You are running django 1.3.1, so some features, such as admin integration, may not work. Please see https://github.com/etianen/django-reversion/wiki/Compatible-Django-Versions
  "django_version": format_version(django.VERSION[:3]),
Copying '/usr/lib/python2.6/site-packages/django/contrib/admin/media/img/gis/move_vertex_on.png'
Copying '/usr/lib/python2.6/site-packages/django/contrib/admin/media/img/gis/move_vertex_off.png'
Copying '/usr/lib/python2.6/site-packages/django/contrib/admin/media/img/admin/icon_clock.gif'
Copying '/usr/lib/python2.6/site-packages/django/contrib/admin/media/img/admin/arrow-down.gif'
Copying '/usr/lib/python2.6/site-packages/django/contrib/admin/media/img/admin/inline-restore.png'
...

Итак, чтобы запустить это как часть установки RPM, я добавил следующее в файл спецификации:

%post
# collect static files
pushd .
cd %{installpath}/src/app/
%{__python} manage.py collectstatic --noinput --settings=settings_prod
popd

Проблема в том, что когда я запускаю это, я вижу запуск задачи:

 sudo rpm -U app-0.2.8.18889M-1.x86_64.rpm -vv 

 ...
+ pushd .
/ /
+ cd /opt/qpsi/app/src/app/
+ /usr/bin/python2.6 manage.py collectstatic --noinput --settings=settings_prod
/usr/lib/python2.6/site-packages/reversion/__init__.py:31: UserWarning: django-reversion 1.5 is intended for use with django 1.3.0. You are running django 1.3.1, so some features, such as admin integration, may not work. Please see https://github.com/etianen/django-reversion/wiki/Compatible-Django-Versions
  "django_version": format_version(django.VERSION[:3]),
There is no South database module 'south.db.oracle' for your database. Please either choose a supported database, check for SOUTH_DATABASE_ADAPTER[S] settings, or remove South from INSTALLED_APPS.
+ popd

Но в выходных данных нет ожидаемого списка копируемых файлов, и статический каталог фактически не заполняется.

Итак, вопросы:

  1. Есть ли что-то особенное в запуске скриптов Python из RPM, о чем мне нужно знать?
  2. Я использую параметр -vv команды rpm, чтобы получить подробный вывод из процесса установки, но есть ли способ дальнейшей отладки того, что происходит внутри rpm после запуска скрипта python.

Спасибо д.


person Dmitry B.    schedule 19.10.2011    source источник


Ответы (3)


Как насчет того, чтобы просто связать их...

%post
#Configure django admin media if it hasn't already been:
[ -d /path/to/new/media ] || ln -s /usr/lib/python2.6/site-packages/django/contrib/admin/media/ /path/to/new/media
person jcfollower    schedule 19.10.2011
comment
Я использую новый способ обработки статических файлов в Django 1.3, поэтому не думаю, что это необходимый шаг. У меня нет проблем с административным носителем, когда я запускаю collectstatic вручную. - person Dmitry B.; 19.10.2011

Вы должны посмотреть на virtualenv (http://pypi.python.org/pypi/virtualenv) , а затем пусть ваш rpm свяжет всю виртуальную среду вместе с каталогом site-packages, чтобы яйца, которые вам нужны, были доступны в развернутой системе, и чтобы яйца были в той версии, которая требуется вашему сценарию. (В приведенном выше случае похоже, что южная версия может отличаться от того, что вы ожидаете).

Затем в разделе %post вызовите python из вашей виртуальной среды вместо системного python,

Проблему отсутствующего яйца будет довольно легко увидеть, но проблемы отладки из-за разных версий яйца могут быть довольно тонкими.

См. также: Развертывание Django с virtualenv внутри пакета распространения?

person pwan    schedule 15.02.2012

В итоге я переместил скрипты из %post в %build. Это позаботилось о проблеме.

person Dmitry B.    schedule 24.02.2012