まだデプロイ作業を途中までしか確認していないので、とりあえずハマったポイントを書いておく。 デプロイ作業をテストしてみたらこんなエラーが出た
$ bundle exec cap production deploy:check
INFO [5f874a7e] Running /usr/bin/env mkdir -p /tmp/hoge/ on fuga
DEBUG [5f874a7e] Command: /usr/bin/env mkdir -p /tmp/hoge/
INFO [5f874a7e] Finished in 0.321 seconds with exit status 0 (successful).
DEBUG Uploading /tmp/hoge/git-ssh.sh 0.0%
INFO Uploading /tmp/hoge/git-ssh.sh 100.0%
INFO [c2bf6ab8] Running /usr/bin/env chmod +x /tmp/hoge/git-ssh.sh on fuga
DEBUG [c2bf6ab8] Command: /usr/bin/env chmod +x /tmp/hoge/git-ssh.sh
INFO [c2bf6ab8] Finished in 0.031 seconds with exit status 0 (successful).
DEBUG [ef8c5c38] Running /usr/bin/env git ls-remote -h [email protected]:fuga/hoge.git on fuga
DEBUG [ef8c5c38] Command: ( GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/hoge/git-ssh.sh /usr/bin/env git ls-remote -h [email protected]:fuga/hoge.git )
DEBUG [cb27da31] Error reading response length from authentication socket
DEBUG [ef8c5c38] Permission denied (publickey).
DEBUG [ef8c5c38]
DEBUG [ef8c5c38] fatal: The remote end hung up unexpectedly
DEBUG [ef8c5c38]
DEBUG [ef8c5c38] Finished in 2.287 seconds with exit status 128 (failed).
うげげ。gitで鍵認証のエラー出てるわ。とりあえずbitbucketに公開鍵を登録してみた。 SSH認証キーをBitbucket/GitHubに設定しよう! [Mac簡単手順] - 酒と泪とRubyとRailsとの通りに登録したら出来た。~/.ssh/configに秘密鍵を追加して
Host bitbucket.org
HostName bitbucket.org
IdentityFile ~/.ssh/id_rsa
User git
TCPKeepAlive yes
IdentitiesOnly yes
じゃあ再度デプロイをテストしてみたら・・・同じエラーが出た。 色々試行錯誤して、「Error reading response length from authentication socket」でググった結果、ssh_agentが動いてないことが判明したので
$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/id_rsa
としてデプロイをテストしたら無事動いた。めでたしめでたし。でも一旦ログアウトしたりするとssh-agentに接続しないとまた同じエラーが出た。ssh-agentへの接続方法はPC便利帳: ssh-agentを使用したパスワードなしの接続を参考にして
$ ps ax | grep ssh-agent
$ ls /tmp | grep ssh
$ SSH_AUTH_SOCK=/tmp/ssh-XXXXX1111/agent.1111; export SSH_AUTH_SOCK;
$ SSH_AGENT_PID=2222; export SSH_AGENT_PID;
````
とやれば接続できて、デプロイできた。
さらに実際にデプロイすると下のようにエラーでまくった。
##capistrano3でbundle exec cap production deloyしようとしたらエラーが出まくる
Gemfileから色々省いてたらエラーが出まくる
+ rubyが指定されてない(rbenvが足りない)
+ uglifierが無いとかsassが足りないとか
+ いちいちGemfile.lockをアップデートしないとエラー出る
rbenvはcapistrano-rbenvをGemfileに追加して、Capfileにcapistrano/rbenvを指定して、config/deploy.rbに
```rb
set :rbenv_ruby, '2.1.0'
とか何とか設定するとおk。
uglifierとかsassとかproductionを指定した場合に使うような設定になってるみたいい(config/environments/production.rb)。とりあえずuglifierとかsassとかcofee-railsとか色々Gemfileに入れておけばエラーでなかった。
デプロイした後でcss関連でエラーが出た
sassが足らないと言われた。sass使わないので、sassが関わるファイル(app/assets/stylesheets内のscssファイル)を消すとエラーは消えた
productionモードでデプロイすると、cssやjsを読み込んでくれない
config/environments/production.rbに次の行を追記
config.assets.compile = true
config.assets.precompile = ['*.js','*.css','*.css.erb']
参考ruby - Rails 4: assets not loading in production - Stack Overflow すると解決した。なんかバッドノウハウみたいでやだ。
productionモードでunicornが起動してくれない
capistranoとは関係なかったけどcapistrano関連と思い込んでたのでメモ。capistranoの設定にミスがあると思って苦しんでたけど、単にunicornのオプションを指定してなかったのが悪かった。
$ bundle exec unicorn_rails -E production
でおkだった。
Capistranoは確かに便利なんだけど、なんかハマりポイントが多いような印象。 バージョン変わって設定方法も変わったみたいだし。最初のハードルが高い感じがする。慣れたら楽になるのかな。
capistrano3でunicornの再起動に失敗する
unicorn + rails 用 Capistrano 3 の設定ファイル - QiitaとCapistrano3 で Unicorn の再起動に失敗したのを対応したメモ | Supernovaが参考になった。
でもrestartでちゃんと再起動して修正箇所が反映しない。stopしてstartしないと。うーん。