2009-08-28 33 views
5

私は顧客のサーバーにインストールされているdjangoプロジェクトを持っています。私は、インストール/アンインストールできるオプションのプラグインであるいくつかのアプリケーションを追加しています。djangoアプリケーションをパッケージ化するにはどうすればよいですか?

これらのプラグインアプリを簡単にインストールしてインストール/アンインストールを簡単にしたいと思います。テンプレートファイルを1つのディレクトリにコピーして、別のディレクトリに、アプリケーションを3つ目のディレクトリにコピーしてください。私はsettings.pyを編集する必要はないと思っていますが、それは助けられないなら大丈夫です。

理想的な状況は、単純にPythonパス上の場所(おそらく特別なプラグインディレクトリですか?)に解凍してアンインストールする場合です。この方法でインストールできるようにアプリをパッケージ化する簡単な方法はありますか?

答えて

4

Pythonパッケージ(distutils、setuptools、pipなど)の説明は省略しますが、単純なzipファイルやtarballの使用を希望しているようです。

用テンプレートファイル:限り、あなたは「django.template.loaders.app_directories.load_template_source」は、プロジェクトのTEMPLATE_LOADERS設定に含まれているとして、私はあなたが一度に一つを言及した「痛みのポイントを」対処しますよこのことについて心配する必要はありません。それぞれのアプリは "templates /"サブディレクトリを持つことができ、そこのテンプレートはプロジェクト全体のテンプレートディレクトリにあるかのように読み込まれます。

メディアファイル:アプリケーションメディアは苦痛です。開発のために、app_directoriesテンプレートローダーと同様に動作するカスタムserve_mediaビューを使用することができます(各アプリケーションでメディアを検索します)。本番環境では、ファイルをコピーするか、シンボリックリンクを使用するか、Webサーバーレベルのエイリアスを使用する必要があります。この問題を円滑にしようとするいくつかのユーティリティアプリがあります。私は今django-staticfilesを使用します。

編集用の設定項目:これは簡単な方法ではありません。そのモデル、テンプレートタグ、管理コマンドなどが動作するためには、INSTALLED_APPSにアプリをリストアップする必要があります。あなたが行うことができることは、あるディレクトリの内容をリストし、INSTALLED_APPSにあるパッケージを動的に追加するカスタムコードをsettings.pyに書き込むことです。ちょっと危険です(あなたの王国への鍵を持っているため、誰がそのディレクトリにファイルを置く権限を持っているかを注意深く考えてください)。新しいファイルはサーバのリロードでしか検出されませんが、うまくいくはずです。

私はこれらのソリューションをまとめると、あなたの理想的な状況を達成することができると思います。インストールするには解凍し、アンインストールするには削除してください。

+0

djano-media-utilsへのリンクありがとうございます。それはメカニズムの最大の痛みです。複数のメディアディレクトリを指定することもできれば幸いです。 INSTALLED_APPSに動的に追加するのはオプションだと思います。あなたはプラグインを配置するためにサーバーにアクセスする必要があるので、インストールする人は、とにかくすべてのファイルにアクセスできます。前にこれを試しましたか? – Siddhi

+0

いいえ、私は動的なINSTALLED_APPS設定を試したことはありません。コンセプトではそれについてあまり複雑すぎるものはありません。実際には、プラグインディレクトリからアプリケーションが追加/削除されるたびにプロダクションWebサーバーを再起動する必要があります。また、プラグインアプリにモデルが含まれている場合は、必要なsyncdbを作成する計画が必要です。 –

0

編集settings.py:あなたのプラグインは、独自の設定ファイルから設定を自分のディレクトリに読み込むことができます。プラグインのパスを "INSTALLED_APPS"から追加/削除するためにroot settings.pyを編集するだけで済みます。

関連する問題