0

私の仕事では、Railsアプリを継承している開発者からRailsアプリを継承しました。 CapistranoとRubberを使用してAWS EC2サーバーにデプロイするAPIです。Capistrano配備のRails Appが間違ったリリースを指している

一般的にうまくいきましたが、最近、2つの奇妙な問題が発生しました。

  1. スタティックページでは、アセットへのアセットのロードが停止されました。基本的には、私はサーバにSSH接続してもファイルが正常に読み込まれないときに指紋ファイル(つまりassets/home/application-30913401938134.css)が存在することを指摘していましたが、直接(myapp.com/assets/home/application-30913401938134.css)ページ。

  2. 私は信じています(ただし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、手動資産のコンパイルなどをしかし、それは見えますあたかもファイルが存在するかのように - アプリケーションが正しくフィンガープリンティングされていないということです。間違ったディレクトリを探していると思います。

+0

多分、次の複製:http://stackoverflow.com/questions/37737917/unicorn-doesnt-pick-up-changes-with-new-deploy-of-rails-app-capistrano-nginx/37799814? –

答えて

0

あなたの質問は、アプリケーションを展開するために使用しているクラウドを教えてくれません。あなたはAWSや英雄を使用している場合、何かを親切にも光を入れて?

+0

AWS EC2サーバです。私は上記の質問を更新しました。 – Sasha

関連する問題