14

HerokuでホストされているRailsプロジェクトに取り組んでいます。アプリを再起動せずに1つのファイルを更新できるかどうか疑問に思っています。

なぜ。バグがありますが、追跡できません。ローカルシステムでは完全に機能しますが、herokuでの処理の途中で停止するようです。

ブレークポイントがないため、コードにステータスの更新を分散させています。(後で削除されます)しかし、Railsアプリに1行のコードを追加することは、5分のプロセスのようなものです。

  1. ファイルを変更する
  2. gitへのステージファイル
  3. コミットファイル
  4. gitをプッシュします(上記はすべて非常に高速です)
  5. herokuがアプリをプルダウンするのを待ち、gemのインストール、または少なくともgemの更新のように見えることを実行します。
  6. ローカルURLを反映するようにいくつかのファイルを変更します
  7. サービスを再開します。

他のすべてのものを実行せずにgitをプッシュする方法はありますか?おそらく、プッシュに追加する特別なパラメータですか?



さらに厄介なのは、私のgitに、同僚に見せたくないチェックインがたくさんあることです。私はherokuの私自身の非本番インスタンス(テストのみ)をターゲットにしており、これらすべての試みをグローバルソース管理に含める理由はありません。

4

4 に答える 4

28

それが不可能な理由には十分な理由があります。Herokuにプッシュすると、アプリケーションの「スラッグ」が生成されます(https://devcenter.heroku.com/articles/slug-compiler)。Herokuが提供する大規模なスケーラビリティを提供するために、このスラッグは読み取り専用であるため、多くの異なる物理マシンに分散している可能性が高い複数のdynoでスピンアップできます。これらの各dynoは、アプリケーションの個別のインスタンスを実行しますが、ルーティングメッシュは、アプリケーションへの要求が正しいdynoに送信されることを保証します。

ここで、これらのインスタンスのいずれかが書き込み可能である場合に何が起こるかを考えてみましょう。5つのdynoを実行している場合、アプリケーションは5つの別々のインスタンスで実行されます。ファイルが書き込まれている場合、実行中のdyno全体にどのように分散されますか?はい、Herokuは、アプリケーションを実行するためのある種の共有ファイルシステムを検討することもできましたが、それは複雑です。ファイルシステムを読み取り専用にすることで(https://devcenter.heroku.com/articles/read-only-filesystem)、この問題は軽減されます。

アプリをビルドしてHerokuにデプロイしたが、S3タイプの永続ストレージを使用するのを忘れた場合、アプリケーションでファイルをアップロードできます(Rubyの世界のようなペーパークリップを介して)が、アップロードされたアセットはそのdynoにのみ存在しますそれを受け取り、dynoがスラッグから最新のコードを受け取ると、新しいコードがデプロイされるか、アプリケーションが再起動されると失われます。

Herokuに対してデバッグしている場合は、通常のgitアーセナルを利用できることを忘れないでくださいgit commit --amend。または、ブランチで作業し、それを直接Heroku()にデプロイします。問題を特定したら、ブランチをマスタースカッシングにgit push heroku <yourbranchname>:masterリベースします(http://git-scm.com/book/en/Git-Branching-Rebasing )。不要になったコミット。

于 2012-07-10T07:51:08.643 に答える
3

XY問題

これは古典的なXY問題です。Xは機能しないコードです。Yは、存在しないGitの誤機能の検索です。

Gitの仕組み

Gitは基本的に、ファイルレベルではなく、ツリーレベルで作業をコミットします。非常に単純化すると、コミットはツリーを指し、ツリーはファイルのセットを指します。コミットをプッシュするときは、オブジェクトがレシーバーにすでに存在しない限り、そのコミットに関連するすべてのオブジェクトをプッシュする必要があります。

Herokuのしくみ

Herokuは、Gitリポジトリ内のアプリケーションをスラッグにコンパイルします。コンパイル中に特定のファイルを無視することはできますが、スラッグのコンパイルを回避することはできません。これがプラットフォームの仕組みです。

適度なスラッグサイズがあれば、これは問題ではありません。私のHerokuアプリは、コンパイルに数秒しかかかりません。スラッグが非常に大きく、コンパイルに長い時間がかかる場合(5分以上かかると主張している場合)、「コンパイルしない」を解決しようとすると、もう1つのXY問題が発生します。

Herokuでのデバッグ

Herokuには、デバッグを支援するための多くの機能とアドオンがあります。ここにあなたが始めるための短いリストがあります。

関連項目

于 2012-07-10T08:27:18.867 に答える
2

不可能です。herokuのセットアップ方法では、変更をプッシュするたびにサーバーが再起動します。

于 2012-07-10T04:10:53.370 に答える
-2

はい、できます。

まず、最後のコミット以降に変更されたすべてのファイルを一覧表示します。

git status

個別にコミットするファイルを追加します。

git add location/file_name.rb git add location/file_name2.rb ..。

プッシュするために追加したファイルにコミットします。

git commit -m "committing files one at a time or two at a time"

今プッシュ

git push heroku

于 2012-07-10T01:58:40.710 に答える