Capistrano3

Tag: Capistrano3/トラブルシューティング

目次

関連ページ

参考情報

トラブルシューティング方法

listタスクを実行してみる

  • 全く動かない場合deploy.rbに以下のようなタスクを追加しておき「bundle exec cap staging list」で実行してみるとよい。
    task :list do
      on roles(:web) do |host|
        execute "ls"
      end
    end
    
    

ログのデバッグ出力

  • traceオプションを追加するとより詳細なログが表示される
    bundle exec cap production deploy --trace
  • それでも足らないときはdeploy.rbに以下を追加。
    set :log_level, :debug
  • さらにlogs/capistrano.logも利用できる。

gem installがうまくいっていない場合

  • ログからコマンドを抜き出し 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 --)'

環境変数の確認

  • sshで実行している際リモートの環境変数が原因でうまくRubyGemがインストールできない場合もある(rmagickとか)
  • この場合以下のようなタスクを作成しておき実行する。
    task :printenv do
      on roles(:web) do |host|
        execute "printenv"
      end
    end
    
  • タスクの呼び出し
    bundle exec cap production printenv

実行時エラー

本番環境でmigrationが実行されない

  • 本番環境に実行した際、なぜかmigrationが実行されない。production用dbじゃなくdevelopment用dbでは実行されている。
  • 最初はステージング環境だけで実行されているので「set :rails_env, "staging"」のせいかと思ったけど
  • ruby on rails - Capistrano 3 deploy:migrate not executing due to missing primary - Stack Overflowにあるように、serverに対して"db"ロールが設定されていないせい?
  • 実際は以下のようにdbロールを設定しただけで、serverのrolesには何も設定しなくてもいけた
    server 'myserver', user: 'sora', roles: %w{web}, my_property: :my_value
    
    role :app, %w{myserver}
    role :web, %w{myserver}
    role :db, %w{myserver}
    
    

エラー対策

デプロイ後にassetsがプリコンパイルされない

  • Capfileでrequire 'capistrano/rails/assets'が有効になっているかどうか確認する。

デプロイ後ExecJS and could not find a JavaScript runtimeエラーが発生

デプロイ後「fatal: Not a git repository (or any of the parent directories): .git」と言われてしまう

  • 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

「Command: [ -d /var/www/myapp/releases/20140211033611/public/assets ]」のようなわけのわからないエラーが発生

「Command : [ -L ...]」が exit status 1 (failed).で失敗する

Too many authentication failuresが発生

  • sshをコマンドラインから使うと問題ない。SSHKitの問題?とりあえず以下で一時的に解決できる
    ssh-add -D

rbenv: 2.3.1 is not installed or not found in $HOME/.rbenv/versions/2.3.1

  • リモートに該当するRubyのバージョンがインストールされていないのが原因。rbenv installする。

rmagickがインストールできない

rmagickがインストールできない: その2

  • 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しなおしたらうまくいった模様。

nokogiriがインストールできない

  • macOSにインストールした際にエラーが起きる場合、deploy.rbなどに以下を追加する。
    set :bundle_env_variables, { nokogiri_use_system_libraries: 1 }
    
  • さらにdeploy先でMacPortsを使っている場合、pkg-configのパスも指定しないといけない。staging.rb/production.rbなどでパスを指定。
    set :default_env, {
    #    'PKG_CONFIG_PATH' => '/opt/local/bin'
      'PATH' => "/opt/local/bin:$PATH"
    }
    

SocketError: getaddrinfo: nodename nor servname provided, or not known

  • 仮想環境にdeployしようとしたときに発生。.ssh/configでHostnameのところにIPアドレスを指定すればよくなった。Hostnameのところに仮想ホスト名を記述すすると例え/etc/hostsに記述してある名前でもうまくいかない。この場合Capistrano関係なく、pingはいけてもsshがいけない状態となっているのでそこから確認する。

deploy:symlink:linked_dirsのエラー

  • lnが失敗している模様。ディレクトリの削除がいっていないのでうまくいっていない?
  • 原因は不明だが、デプロイファイル(staging.rb)で、serverで指定したホスト名と、roleで指定したホスト名が一致していなかったのが原因だったのかも(serverのほうがホスト名で、roleのほうがIPアドレスになっていた)。

openssh(sshクライアント)でログインしたあとCapistranoでデプロイしようとするとHostKeyMissmatchが発生

$HOME/.rbenv/bin/rbenv exec bundle check --pathがfailedになっている。

  • その後の処理でInstall missing gems with `bundle install`によってたらないgemsがインストールされている。すなわち正常な処理かも。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-04-12 (水) 15:18:07