#author("2017-02-06T16:40:19+09:00","default:wikiwriter","wikiwriter") [[Capistrano3]] &tag(Capistrano3/トラブルシューティング); *目次 [#u9c1ce01] #contents *関連ページ [#fbaba88d] *参考情報 [#uff8e943] *トラブルシューティング方法 [#g1d276b6] **listタスクを実行してみる [#jb95e0c4] -全く動かない場合deploy.rbに以下のようなタスクを追加しておき「bundle exec cap staging list」で実行してみるとよい。 #pre{{ task :list do on roles(:web) do |host| execute "ls" end end }} **ログのデバッグ出力 [#r4f8eb85] -traceオプションを追加するとより詳細なログが表示される bundle exec cap production deploy --trace -それでも足らないときはdeploy.rbに以下を追加。 set :log_level, :debug -さらにlogs/capistrano.logも利用できる。 **gem installがうまくいっていない場合 [#pab134de] -ログからコマンドを抜き出し ssh xxx 'コマンド'を実行してみると良いかも。-quietオプションは除去するとよい。 ssh remotehost 'cd /Users/sora/www/myapp/releases/20160616053411 && ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.3.1" ; $HOME/.rbenv/bin/rbenv exec bundle install --path /Users/sora/www/myapp/shared/bundle --without development test --deployment --)' **環境変数の確認 [#aa1be483] -sshで実行している際リモートの環境変数が原因でうまくRubyGemがインストールできない場合もある(rmagickとか) -この場合以下のようなタスクを作成しておき実行する。 #pre{{ task :printenv do on roles(:web) do |host| execute "printenv" end end }} -タスクの呼び出し bundle exec cap production printenv *エラー例 [#l88efaa6] **デプロイ後にassetsがプリコンパイルされない [#ce91609e] -Capfileでrequire 'capistrano/rails/assets'が有効になっているかどうか確認する。 **デプロイ後ExecJS and could not find a JavaScript runtimeエラーが発生 [#ta14004a] -[[ruby on rails 3.1 - ExecJS and could not find a JavaScript runtime - Stack Overflow:http://stackoverflow.com/questions/6282307/execjs-and-could-not-find-a-javascript-runtime]]によると、サーバー環境にNode.jsをインストールする。 #pre{{ sudo apt-get install nodejs sudo yum install nodejs }} **デプロイ後「fatal: Not a git repository (or any of the parent directories): .git」と言われてしまう [#e2931787] -Gemfileにローカルフォルダで管理しているgemファイルを追加していて、そのgemspecで以下のようにgitを使っているから。 gem.files = `git ls-files`.split($\) -deploy先に.gitフォルダが存在しないためこのような減少が発生する模様。 -ローカルフォルダでgemを管理するのはやめたほうが良いかもしれない。 -もしくはgemspecでgit ls-filesを使わないようにするか。 [[`git ls-files` in gemspec template is bad practice. · Issue #2287 · bundler/bundler:https://github.com/bundler/bundler/issues/2287]] **「Command: [ -d /var/www/myapp/releases/20140211033611/public/assets ]」のようなわけのわからないエラーが発生 [#ve91d55a] -[[ruby on rails - Capistrano 3 process failing - Stack Overflow:http://stackoverflow.com/questions/21692601/capistrano-3-process-failing]]によるととりあえず気にしなくても良いのだろうか。 **「Command : [ -L ...]」が exit status 1 (failed).で失敗する [#te9478f2] -[[ruby - Capistrano 3 deploy failed messages - exit status 1 (failed) - Stack Overflow:http://stackoverflow.com/questions/33128623/capistrano-3-deploy-failed-messages-exit-status-1-failed]] -致命的エラーならばCapistranoが止まるはずなので気にしなくてよい(のか?) ** Too many authentication failuresが発生 [#af93b281] -sshをコマンドラインから使うと問題ない。SSHKitの問題?とりあえず以下で一時的に解決できる ssh-add -D ** rbenv: 2.3.1 is not installed or not found in $HOME/.rbenv/versions/2.3.1 [#n803c835] -リモートに該当するRubyのバージョンがインストールされていないのが原因。rbenv installする。 **rmagickがインストールできない [#wf647544] -deploy時にrmagickのインストールに失敗する。[[Capistrano からの bundle install で rmagick のインストールが失敗するときの対処方法 - Shred IT!!!!:http://jetglass.hatenablog.jp/entry/2015/05/14/150507]] -原因は環境変数がうまく設定されていないせいだった。 -相手さきがMacPortsを導入しているMacだったのでpathが/opt/local/binに通っていないのが原因。以下の設定をproduction.rbに追加したところうまくいった。 #pre{{ set :default_env, { # 'PKG_CONFIG_PATH' => '/opt/local/bin' 'PATH' => "/opt/local/bin:$PATH" } }} **rmagickがインストールできない: その2 [#id9de921] -deploy時に失敗する。エラーメッセージは以下の通り。 Gem Load Error is: This installation of RMagick was configured with ImageMagick 6.9.4 but ImageMagick 6.9.6-0 is in use -リモートでportを更新したら発生するようになった(rmagickがインストールされなおしていないのが原因?) -とりあえずmacportsでrmagickのバージョンを元に戻して解決。 -さらに調査した結果/shared/bundleの下に古いキャッシュが存在しているのが原因のようだった。shared/bundle/rubyを削除して、deployしなおしたらうまくいった模様。 **SocketError: getaddrinfo: nodename nor servname provided, or not known [#abbf649d] -仮想環境にdeployしようとしたときに発生。.ssh/configでHostnameのところにIPアドレスを指定すればよくなった。Hostnameのところに仮想ホスト名を記述すすると例え/etc/hostsに記述してある名前でもうまくいかない。この場合Capistrano関係なく、pingはいけてもsshがいけない状態となっているのでそこから確認する。