0

rpm インストール内から Python スクリプトを実行する際に注意すべき点はありますか?

ここに問題の要点があります。Django アプリをデプロイするためのカスタム RPM インストーラーを作成しました。インストール プロセスの一環として、すべての静的ファイルを収集して定義済みの場所にコピーする 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 インストールの一部として実行するために、spec ファイルに以下を追加しました。

%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 内で何が起こっているかをさらにデバッグする方法はありますか。

ありがとう。

4

3 に答える 3

0

virtualenv ( http://pypi.python.org/pypi/virtualenv ) を確認してから、rpm に仮想環境全体と site-packages ディレクトリをバンドルする必要があります。これにより、必要な卵が展開されたシステムであり、卵はスクリプトが必要とするバージョンになります。(上記の場合、南バージョンは予想とは異なる可能性があるようです)。

次に、%post セクションで、システム python の代わりに仮想環境から python を呼び出します。

Egg の欠落の問題は非常に簡単に確認できますが、egg のバージョンの違いによるデバッグの問題は非常にわかりにくい場合があります。

参照:配布パッケージ内で virtualenv を使用して Django をデプロイしますか?

于 2012-02-15T14:01:45.407 に答える
0

最終的に、スクリプトを %post から %build に移動しました。それは問題を処理しました。

于 2012-02-24T19:57:21.403 に答える