私の仕事では、Railsアプリを継承している開発者からRailsアプリを継承しました。 CapistranoとRubberを使用してAWS EC2サーバーにデプロイするAPIです。Capistrano配備のRails Appが間違ったリリースを指している
一般的にうまくいきましたが、最近、2つの奇妙な問題が発生しました。
スタティックページでは、アセットへのアセットのロードが停止されました。基本的には、私はサーバにSSH接続してもファイルが正常に読み込まれないときに指紋ファイル(つまり
assets/home/application-30913401938134.css
)が存在することを指摘していましたが、直接(myapp.com/assets/home/application-30913401938134.css
)ページ。私は信じています(ただし100%を確認していない)後に上記のような問題が始まった、API自体は失敗し始めた - (JBuilderのを使用して)
json
ビューをレンダリング、特にすべてのエンドポイント。エラーは常にの変形である:{ "message": "Missing template layouts/my-controller-name with {:locale=>[:en], :formats=>[:json], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :jbuilder, :coffee, :md]}. Searched in:\n * \"/ebs/my-app-staging/releases/20160621212418/app/views\"\n * \"/ebs/my-app-staging/shared/bundle/ruby/2.1.0/gems/apipie-rails-0.3.6/app/views\"\n * \"/ebs/five_api-staging/shared/bundle/ruby/2.1.0/gems/kaminari-0.16.1/app/views\"\n", "type": "ActionView::MissingTemplate" }
上記(右への道)に注意すべき重要な事はreleases/20160621212418
です。このリリースはではなく、最新リリースのであるため、これは重要です。そして、何度も何度も展開すれば、そのエラー・メッセージは、サーバから削除されたリリースを参照して、同じままです。
いくつかの背景は、この設定がどれほど典型的であるかわからないためです。サーバーにSSH接続して、自分のアプリ(具体的には
ebs/my-app-staging/current
)に移動できます。そのcurrent
ディレクトリは、ebs/my-app-staging/releases
のリリースの1つとのシンボリックリンクです。一般に3つのリリースがあります。それぞれのRailsアプリディレクトリはデプロイ時に名前が付けられています(つまり、20160621212418
、最も古いものはデプロイスクリプトの一部としてプルーニングされます)。20160621212418
をリリース、エラーが言及され、私は実際の最新のリリースのフォルダ(ないそれはそうものに再シンボリックリンクcurrent
にSSH'dターミナルでコマンドを実行しようとした3
の中ではありませんビューと潜在的に資産を検索する)、上記の問題の両方が同じ誤った指摘のアプリケーションから生じることを期待しています。
コマンド:私はls -l
を実行したときに
sudo -p 'sudo password: ' rm -f /ebs/my-app-staging/current && sudo -p 'sudo password: ' ln -s /ebs/my-app-staging/releases/20160621223232 /ebs/my-app-staging/current
は今、それが正しいのリリースにcurrent
のようなポイントを探しますが、同じエラーにAPIの結果を打つことは(間違ったリリースでビューを探しています)。
と言うことですすべてが:
私は本当にこのことで混乱しています。コントローラーが別のリリースのビューを指しているのはなぜですか?
これを解決するのに役立つファイル/情報はありますか?
これは既知の/再発するカピストラーノの問題ですか?これを解決する方法はありますか?
サーバを再起動する必要がありますか?
実際にどのリリース番号がCapistranoによって提供されているかを検出する方法はありますか?
最初に何が起こる可能性がありますか?私は明らかに、シンボリックリンクを解除して、すべてのデプロイ時に手動でサーバをハード・リスタートさせたくないと思っています。
[デバッグ]に関する一般的な考え方や提案はありますか?ところで
ではなく、完全に関連した - 私はちょうど最初の問題は、私はすべての資産のパイプライン関連の修正の種類しようとしたことを思っていた:
config.serve_static_files = true
、手動資産のコンパイルなどをしかし、それは見えますあたかもファイルが存在するかのように - アプリケーションが正しくフィンガープリンティングされていないということです。間違ったディレクトリを探していると思います。
多分、次の複製:http://stackoverflow.com/questions/37737917/unicorn-doesnt-pick-up-changes-with-new-deploy-of-rails-app-capistrano-nginx/37799814? –