15

私はWebアプリに取り組んでおり、Githubでソースコードをホストし、Herokuでアプリを実行しています。すべて正常に動作しますが、問題があり、頭を包むことができません。コードをデプロイする前に、コードを最適化するためにいくつかのスクリプトを実行します(ファイルの縮小、連結など)。herokuアプリは、最適化されたバージョンのアプリのみを使用します。

基本的に、私は2つのフォルダを持っています:devproductionDev私が書いたソースコードが含まれておりproduction、ビルドスクリプトによって生成されます(私はgruntとrequirejsを使用しています)。現在、両方のフォルダーが私のGitリポジトリにあり、両方ともGithubとHerokuにプッシュされています。私が欲しいのはdev、GithubとproductionHerokuだけにあることです。このブログで説明されているように、Herokuのさまざまなブランチをセットアップする方法についていくつかの記事を読みました。実稼働ブランチをセットアップし、フォルダーをマスターブランチにproduction保持しながら、フォルダーのみをそこに置くことはできますか?devまたは、個別のリポジトリが必要ですか?

誰かが似たようなことを試しましたか?これは異常なことではないと思います。

4

4 に答える 4

7

単にheroku.slugignoreファイルの使用を検討することをお勧めします(https://devcenter.heroku.com/articles/slug-compilerを参照)。

devこのファイルを使用すると、herokuが各サーバーインスタンスにデプロイするパッケージからフォルダーを削除できると同時に、すべてのコードを同じリポジトリに保持できます。

問題の根本は、デプロイメント戦略を、最終ビットをサーバーにアップロードする戦略として考えることです。このビットは、リポジトリーを構築するためのアーティファクトです。このような場合、ビルドは通常、ソースとは別に保存およびアーカイブされます。

Herokuのモデルは、リポジトリがデプロイするアーティファクトであると想定しているという点で、これとは少し異なります。違いはわずかですが、あなたの場合は、herokuに提供させたいビットをリポジトリにコミットする必要があることを意味します。

別の考え方としては、productionフォルダーがなくても実行でき、サーバーの起動の一部として、スクリプトを実行してproductionフォルダーファイルを生成します。これにより、フォルダを削除しproduction、サーバーの起動ごとにこのプロセスを実行することを犠牲にして、リポジトリをクリーンに保つことができます。これは非常に費用がかかり、望ましくないことが判明する可能性があります(Herokuがサーバーの起動を待機してからサーバーを放棄するまでの時間には制限があります)が、Herokuとgitの関係を明確にするのに役立つことを願っています。

于 2012-12-07T15:50:17.257 に答える
5

この状況は少し珍しいです。しかし、ここにいくつかのアイデアがあります:

  • 私はあなたが参照した記事のプロセスと同様のプロセスを使用しています。
  • 私はあなたの言うように単一のアプリだけを作成します。私はあなたのdevフォルダに新しいgitリポジトリを開始してそれを作成します。
  • 次に、この回答で説明されているものと同様の展開戦略をお勧めします:https ://stackoverflow.com/a/8058194/267025 。私はそれを以下に適応させました:

rakeとの2つのタスクを含むファイルを作成しrake deploy:productionますrake deploy:postprocess_files。これらのタスクは次のようになります。

namespace :deploy do

  task :production do
    puts "turn on 'maintenance page' on heroku"
    system "heroku maintenance:on"

    puts "deploying to production"
    system "git push heroku-prod master"

    puts "post processing files..."
    system "heroku run rake production:postprocess_files"

    puts "take off maintenance page"
    system "heroku maintenance:off"

    puts "done"
  end 

  task :postprocess_files do
    puts "run postprocessing of files on heroku"
    ... add commands here to post process the files.
  end 
end

rake deploy:production次に、gitを直接使用してプッシュするのではなく、を使用して本番環境にデプロイします。rakeファイルは次のようになります。

  1. メンテナンスページを設定し、
  2. 生産にプッシュ、
  3. ファイルの後処理を行い、
  4. メンテナンスページを削除します。

ファイル内の2番目のrakeタスクには、ファイルに対して後処理を実行するコマンドがあり、最初のrakeタスクによってherokuで実行するために呼び出されることに注意してください。

別の方法として、Herokuが各デプロイの一部として実行するassets:precompileタスクを拡張できる場合があります。それは本質的にあなたがとにかくやっていることです-本番環境へのデプロイのためにアセットを準備します。

于 2012-06-24T09:55:49.413 に答える
2

次の理由で少し混乱します:

  • devとは環境productionを表し、生成されたコンテンツを含むディレクトリです。 これらはVCSにあるべきではありませんが、実行中の環境を認識し、それに応じて適切なディレクトリを作成するスクリプトによって自動的に生成されます。

  • 参照している記事devproduction言及されている「Herokuに複数の環境をデプロイする(Githubでコードをホストしている間)」は、プロモーションステージを表し、ブランチです。

ブランチの使用は、リリースで生成されたコードを保存するためではなく、(前述のブランチで)コードバリエーションを分離する場合にのみ有効です。
特定のリリース管理の問題(つまり、適切な配信の生成)は、スクリプト(コードと一緒にバージョン管理できます)によって管理し、フックとして使用して、適切なコードセットを生成および展開する必要があります。適切な場所。

于 2012-06-24T08:30:44.930 に答える
2

私は個人的にこのソリューションが大好きです:https ://github.com/mbuchetics/heroku-buildpack-nodejs-grunt そしてこれも見てください:https ://medium.com/the-javascript-collection/how-to-deploy -a-grunt-project-on-heroku-c227cb1ddc56

正直なところ、これは最もクリーンな方法の1つです。

于 2014-06-11T06:31:10.867 に答える