3

Heroku にプッシュしたい git で管理されているソース コードがいくつかあります。ソース コードには複数の異なる製品が含まれており、その中には独自の heroku インスタンスを持つものもあります。だから、このようなもの:

src/
 lib-files/
 app1/
 app2/
 app3/
 other-files/
 package.json

したがって、heroku には、app1 と app2 のインスタンスがあります。これらはどちらも ./lib-files と package.json に依存していますが、app2、app3、またはその他のファイルには依存していません。

すべてのファイルを含む git リポジトリ全体をアプリごとに heroku にプッシュしたくありません。つまり、app1 インスタンスに app2、app3、またはその他のファイルのコードを含めたくありません。必要のないデータが大量にあり、それをコピーするのに永遠に時間がかかるからです。

これを回避するには、アプリごとに新しい git リポジトリ (app1 に必要なものだけを含むものと app2 用のものなど) を作成し、それらの個々のリポジトリを heroku にプッシュしました。これは機能しますが、管理しなければならない他のすべての追加リポジトリがあるため、少しハックに思えます。また、他の開発者がherokuにプッシュできるようにしたい場合は、おそらくgitにチェックインして、それらのリポジトリを利用できるようにする必要があります(奇妙に思えます)。

これを達成するための良い方法は何ですか?


アップデート:

Heroku リポジトリを作成して、各アプリに適切なものだけを含めてから、heroku を (github ではなく) それらのリポジトリのプライマリ リモートにするとどうなりますか? 対処するリポジトリはまだ複数ありますが、少なくともすべての開発者には、それらのクローンを作成するための標準的な場所があります (ソース コード リポジトリは github にあり、heroku デプロイ リポジトリは heroku にあります)。それについての考えは?

4

3 に答える 3

5

私が選択する解決策は分岐です。すべてのファイルを含むマスター ブランチと、必要なものだけを含む各アプリケーションのブランチがあります。

例えば:

$ git init
$ git add .
$ git commit -m "Initial commit"
$ git checkout -b app1   # create a new branch for app1 derived from master
$ git rm what-you-dont-need-for-app1
$ git commit -m "Initial app1 commit"
$ git checkout master    # switch to master again
$ git checkout -b app2
$ # repeat same steps as for app1

.gitignoreまた、コミットしたくないものを git に伝えるために、各ブランチに固有の -file を持つこともできます。

于 2013-08-09T23:57:51.773 に答える
1

私が最終的にこれを行った方法は、heroku にデプロイされたアプリのバージョンのプライマリ リモートを格納することでした。一方、誰もが取り組んでいるメインのソース コード リポジトリは github にアップされています。コードが次のようになっているとします。

src/
 app1/
 app2/
 app3/
 lib-files/
 other-files/
 package.json

次に、app1 と app2 用の 2 つの heroku アプリがあります。これらには、各アプリに必要なコードのみが含まれています。

app1:

src/
  app1/
  lib-files/
  other-files/
  package.json

app2:

src/
  app2/
  lib-files/
  other-files/
  package.json

ソース コードに取り組みたい場合は、github から完全なバージョンを複製します。heroku にデプロイする場合は、そこからアプリ リポジトリの 1 つを複製します。

次のことを行う各アプリをデプロイするためのスクリプトを作成しました。

  1. ローカル ボックスにまだ存在しない場合は、heroku から git リポジトリのクローンを作成します。
  2. そのアプリに必要なファイルだけをメインのソース リポジトリから heroku リポジトリにコピーします。
  3. 変更をコミットする
  4. リポジトリをherokuにプッシュ

私が遭遇した問題の 1 つは、各アプリに独自の Node.js アプリケーションがあり、通常、そのディレクトリに移動して node コマンドを実行することで、開発環境でそれぞれを開始することです。

cd app1
node server.js

ただし、Heroku では、Procfile と package.json ファイルが git リポジトリの最も外側のディレクトリにあると想定されるため、これはうまく機能しません。私の package.json ファイルは既にそこにありますが、アプリケーションごとに個別の Procfile を作成し、デプロイするアプリケーションに応じてそれらをコピーする必要がありました。内部はそれぞれ次のようになります。

web: node app1/app.js

とにかく、この設定はうまくいくようです。

于 2013-08-14T16:19:48.740 に答える