2011-10-19 43 views
0

从rpm安装中运行Python脚本时,我应该注意哪些问题?作为rpm安装过程的一部分运行Python脚本

这是问题的要点。我们创建了一个定制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. 有什么特别之处从RPM运行的Python脚本,我需要的
  2. 要知道我使用rpm命令的-vv选项,以获取详细的输出从安装过程中,但有一种方法可以在Python脚本启动后进一步调试rpm内部的内容。

感谢 D.

回答

0

我结束了从移动的%post脚本来构建%。这照顾到了这个问题。

0

如何只符号链接他们...

%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 
+0

我正在利用Django 1.3处理静态文件的新方法,所以我不认为这是必要的步骤。我手动运行collectstatic时,对管理员介质没有任何问题。 –

0

你应该看看的virtualenv(http://pypi.python.org/pypi/virtualenv),然后有你的RPM包的整个虚拟环境,沿与site-packages目录一起使用,因此您需要的鸡蛋将在部署的系统上可用,并且鸡蛋将处于您的脚本所需的版本。 (在上面的例子中,听起来南方版本可能与你期望的不同)。

然后在%post部分,从您的虚拟环境,而不是系统蟒蛇叫蟒蛇,

缺少蛋的问题将很容易看到,但是在调试由于不同的鸡蛋版本问题,可以很微妙。

参见:Deploying Django with virtualenv inside a distribution package?

相关问题