8

20か国に20のサイト(サイトごとに1つの異なるドメイン)を持つDjangoプロジェクトを作成しました。サイトはすべてを共有します:コードベース、データベース、URL、テンプレートなど。

彼らが共有していないのは、各サイト設定ファイル(各サイトには1つの設定ファイルがあり、これらすべてのファイル)で設定した小さなカスタマイズ(ロゴ、CSSテーマの背景色、言語コードなど)だけです。一般的なものを含むグローバル設定ファイルをインポートします)。今のところ、開発モードでサイトを実行するために、次のことを行います。

django-admin.py runserver 8000 --settings=config.site_settings.site1
django-admin.py runserver 8001 --settings=config.site_settings.site2
...
django-admin.py runserver 8020 --settings=config.site_settings.site20

いくつか質問があります。

  1. サイト(ドメイン)ごとに仮想ホストを作成して、サイトのsettings.pyファイルに渡すことができることを読みました。ただし、これにより、サイトごとに1つのDjangoインスタンスが作成されるのではないかと心配しています。私は正しいですか?
  2. 展開を行うためのより効率的な方法はありますか?django-dynamicsitesについて読んだことがありますが、それが正しい方法かどうかはわかりません。
  3. Herokuを使用してデプロイすることにした場合、Herokuはアプリごとに1つの設定ファイルしか想定していないようです。したがって、20個のアプリが必要になります。そのための解決策はありますか?

ありがとう!

4

1 に答える 1

7

それで、私は最近似たようなことをしました、そして以下の戦略が最良の選択肢であることがわかりました。この時点で、GitブランチとHerokuリモートに精通していることを前提としています。そうでない場合は、最初にこれを読む必要があります:https ://devcenter.heroku.com/articles/git#multiple-remotes-and-environments

私が取っている主な戦略は、次のような単一のコードベース(単一のGitリポジトリ)を持つことです。

  • masterテンプレート、ビュー、URLなどのすべての共有コードを含むブランチ。
  • siteに基づく多くのブランチにmasterは、サイト固有のすべてのカスタマイズが含まれています:css、イメージ、設定ファイル(大幅に異なる場合)。

これが機能する方法は次のようになります。

まず、masterブランチにいることを確認します。

次に、ドメインの1つに新しいgitブランチを作成します。例:git checkout -b somedomain.com

somedomain.com第三に、あなたが望むように見えるようにあなたのブランチをカスタマイズしてください。

次に、somedomain.comを実行して、Herokuにライブでデプロイしますheroku create somedomain.com --remote somedomain.com

somedomain.com次に、ブランチコードを新しいHerokuアプリケーションにプッシュしますgit push somedomain.com somedomain.com:master。これにより、コードがHerokuにデプロイされます。

somedomain.com独自のHerokuアプリケーションを使用してブランチをデプロイし--remote somedomain.comたので、通常のHerokuコマンドに追加することで、通常のHerokuのすべての作業を実行できます。

  • heroku pg:info --remote somedomain.com
  • heroku addons:add memcache:5mb --remote somedomain.com

つまり、基本的に2つのブランチがあります。ブランチmastersomedomain.comブランチです。

ブランチに戻りmaster、次のドメイン用に別の新しいブランチを作成しますgit checkout master; git checkout -b anotherdomain.com。次に、好みに合わせてカスタマイズし(css、サイト固有のもの)、上記と同じ方法でデプロイします。

これで、これがどこに向かっているのかがわかると思います。カスタムごとに1つのgitブランチがdomainsあり、ドメインごとに独自のHerokuアプリがあります。(明らかに)利点は、これらのプロジェクトのカスタマイズのそれぞれがブランチに基づいていることです。つまり、すべてのサイトを一度masterに簡単に更新できます。

masterブランチ内のビューの1つを更新するとします。どのようにして、それをすべてのカスタムサイトに一度に展開できますか?簡単に!

とにかく走れ:

  • git checkout somedomain.com
  • git merge master
  • git push somedomain.com somedomain.com:master#変更をデプロイする

そして、ドメインごとに繰り返します。私の環境では、これを行うスクリプトを作成しましたが、必要に応じて手動で行うのは簡単です。

とにかく、うまくいけばそれが役立つでしょう。

于 2012-08-03T21:41:21.063 に答える