Date Modified Tags Rails / ruby

まだデプロイ作業を途中までしか確認していないので、とりあえずハマったポイントを書いておく。 デプロイ作業をテストしてみたらこんなエラーが出た

$ 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 の設定ファイル - QiitaCapistrano3 で Unicorn の再起動に失敗したのを対応したメモ | Supernovaが参考になった。

でもrestartでちゃんと再起動して修正箇所が反映しない。stopしてstartしないと。うーん。