0

本番サーバーで、データベースを同期したいと思います。

私がそれをやっただけなら

django-admin.py syncdbsettings.py を選択します。しかし、設定から継承する追加の settings-production.py があります。

したがって、私はこれを思いつきました:

django-admin.py syncdb --settings=/path/to/settings_production

ImportError: 設定 '/path/to/settings_production' をインポートできませんでした (sys.path にありますか?): ファイル名によるインポートはサポートされていません。

私はグーグルで検索し、誰かがここで同様の問題を抱えていることを発見しました。しかし、私を混乱させるのは、WSGI.py は Apache だけが読み取るということです。自分でコマンドを実行した場合ではありません。そこにある答えは、私には本当に意味がありません。

sys.path に production_settings を手動で追加して syncdb を実行するにはどうすればよいですか? どうもありがとう、

4

1 に答える 1

1

まずsettings_production.py、 が と同じディレクトリにあることを確認しsettings.pyます。

設定から継承しているため、の下部に追加できますsettings.py

try:
   from settings_production import *
except ImportError:
   pass

使用するだけの場合settings_production.pyは、アプリケーション (データベースなど) のすべての設定があることを確認してから、次のようにします。

DJANGO_SETTINGS_MODULE=settings_production python manage.py syncdb

編集

コメントとして投稿するつもりでしたが、長くなりすぎました。

通常、本番環境では、 master にインポートできるいくつかの値のみを変更するため、このようにしましたsettings.py。変数の最後の値が使用されます (したがって、で本番データベースsettings_production.pyを設定すると、その設定が使用されます)。

django はデフォルトでsettings.py;を探すので、この方法の方が簡単です。特にマイナーなものを変更する場合は、環境変数とインポート パスを処理する必要がなくなります。

このアプローチにはいくつかの欠点があります。たとえば、特に複数の環境(ステージング/テスト/本番/開発)がある場合、その非常に移植性が高いとは想像できません。複数のfrom _foo_ import *ステートメントがあり、インポートの順序が重要になるため、問題が発生する可能性があるためです。たとえば、一部の開発者がテスト ブランチから削除するのを忘れsettings_*.pyたため、テスト環境も dev ファイルを取得しました。

より複雑なセットアップでは、マスターファイルの完全なコピーを保持する方が簡単です。次に、それらのファイルの python パスをsettings.pyポイントします。DJANGO_SETTINGS_MODULEここでの注意点はPYTHONPATH、設定の場所を含めるように が調整されていることを確認する必要があることです。

その他のアイデアについては、SplitSettings wiki エントリを参照してください。

于 2012-08-06T13:11:27.423 に答える