2011-08-11 2 views
1

私の開発とdjangoフレームワークのためにsysadminをやっているのはかなり新しいです。私は私のローカルのdevステーションと私の生産環境に異なるユーザー名/パスワードを持っています。Djangoのビルドオートメーション

私はサーバーとしてdotcloudを使用しています。ポストインストールスクリプト(Python、bash、それは何でも)を書くことができ、新しいプッシュが実行されるたびに実行されます。

しかし、私はこれについてどうやって行くのか分かりません。これを自分で書く必要がありますか?そこにはPython/Djangoビルドの自動化ツールがあり、それを手伝ってくれますか?

明確化:サーバー上のをsettings.pyでtrueに変更するにはどうすればよいですか?

+0

[buildout](http://www.buildout.org/)をご覧ください。または[Fabric](http://docs.fabfile.org/en/1.2.0/index.html) –

答えて

1

私のプロジェクトがローカルディレクトリ構造に存在する場合、私は通常、production settings.pyの最後に自分の開発設定をインポートします。

また、DBの設定や、生産と開発の異なる設定を別々のファイルに保存し、SVNから削除することもできます。

ちょうどあなたのsettings.pyの最後にこれを追加します。

try: 
    from myapp.specific_settings import * 
except ImportError: 
    pass 

をこの場合、specific_settingsは、本番環境と開発環境では異なるであろう。

あなたは動的開発と生産のサーバーの間で選択したい場合は設定の終わりにこれを使用する:私は私の頭の上に本を書き、その中にいくつかのバグがあるかもしれません

import os 
directory = os.path.dirname(__file__) 
if directory == '/home/yourname/development/': 
    from myapp.development_settings import * 
else: 
    from myapp.production_settings import * 

注意。私が家に帰るときにそれを確認します。

+0

um、拡張に気をつけますか? – CamelCamelCamel

+0

私の以前の投稿を編集しました。 – mohi666

+1

これは動作しません。 'from package import module'でインポートされた名前は、例えば' module.DEBUG'として名前空間に入れられます。 Djangoは 'production_settings.DEBUG'定数をうれしく無視します。実際の設定を含むモジュールから '*'をインポートしてください。 – rewritten

3

djangoの標準的な方法は、environmanet変数DJANGO_SETTINGS_MODULEを使用することです。異なる設定をポイントし、両方とも共通のものに共通の設定モジュールをインポートしてみましょう:

あなたはまた得るような、いくつかのシステムの状態に応じて、別のものから一つのメイン設定やインポートの名前を使用しての代替戦略を使用することができます
# settings_production.py 

from settings_common import * 
DEBUG = False 
DATABASES = {...} 


# settings_development.py 

from settings_common import * 
DEBUG = True 
DATABASES = {...} 


# settings_common.py 

INSTALLED_APPS = (...) # etc 

os.platform.node()またはsocket.gethostname()を入力し、その値(またはその一部)を切り替えます。

reversed_hostname_parts = socket.gethostname().split('.').reverse() 
host_specific = { 
    ('com', 'dotcloud'): 'production', 
    ('local'): 'dev', 
} 

for index in range(len(reversed_hostname_parts)): 
    identifier = tuple(reversed_hostname_parts[:index+1]) 
    if identifier in host_specific: 
     extra_settings = host_specific[identifier] 
     break 
else: # executed when the loop has not been `break`ed 
    extra_settings = 'dev' # any default value 


if extra_settings == 'dev': 
    from development_settings import * 
elif extra_settings == 'production': 
    from production_settings import * 

EDIT:追加リンク

は、他の戦略をhttps://code.djangoproject.com/wiki/SplitSettingsを参照してください。

+0

私は最初の答えを使用しましたが、私は両方の答えのオーバーヘッドが嫌いです。私はこれがアプリケーションコードにあるべきだとは思わない - ビルドの自動化のためのシェルスクリプトでなければならない。例えば。デバッグコードを振りかざしたいと思っていますが、コードの周りにあれば、展開する際に削除する必要があります。私はまだもっと良い解決策を探しています:) – CamelCamelCamel

+0

html5定型ビルド。そうですね。いずれにせよ、プロダクションログ設定では、 – CamelCamelCamel

+0

のデバッグログをフィルタリングする必要があります。逆に、ビルドシステムが残りの部分から "デバッグコード"を伝えるのはどうでしょうか?デプロイされている場所によって2つの異なるコードを使用しますか?おそらくコードをテストする能力に悪影響を及ぼすでしょう。 – rewritten

関連する問題