ハイパーニートプログラマーへの道

頑張ったり頑張らなかったり

久しぶりにSqale.jpにデプロイしたらコケたので(ついでにrvmからrbenvに乗り換える on Ubuntu)

いやあもうSqale.jpに久しぶりにデプロイしたら、にっちもさっちもいかなくなりまして。
詳しくは後述するとして、結論から先に書くと

.ruby-versionをgit addしろ

色々やったけど、ああもうダメだ・・・と思っていたところ、Sqale.jpからメールが。一部引用させていただくと

お問い合わせいただき、誠にありがとうございます。

現在、ビルドサーバとお客様のコンテナ間でのRubyバージョンに差異があるため、 今回のエラーが発生しております。

お手数をおかけして大変申し訳ございませんが、 現在この問題の解決策として .ruby-version に2.2.1 のようなバージョン指定をした後、 git add, git commit をしてから、再度デプロイをお願いいたします。

git add, git commit をしてから、再度デプロイをお願いいたします。

ん、git addしろ・・・ですと?

ここにも書いてある。

Sqale - Ruby 2.0 を使う方法 Mac 編

つまりただ単に.ruby-versiongit addするのを忘れていた、というオチです。

とうわけでもともと2.1.1を使っていたのでローカル側で戻して、.ruby-versionの内容も確認した上でgit add,git commit
そしてデプロイ。

Sqale側のコンソールに入ると、まだ2.0.0のようだったので、rbenv global 2.1.1をした・・・けどダメだった(rehashを行ってなかったかも)ので、vi .ruby-version2.1.1に書き換え。

ここでアプリを再起動・・・したかどうかは覚えてないですが、無事サイトは復帰しましたとさ。

ドキュメントちゃんと読め、確認しろということですな・・・。
この場をお借りしてSqaleさんにお礼を申し上げたいと思います。

Sqale

というわけで、以下蛇足です。


久しぶりにデプロイしたら

コケてるので、Sqaleのコンソールに入って確認すると、以下のようなエラーが

$ cat /var/log/app/stderr.log
.
.
I, [2015-05-14T01:22:40.220773 #27752]  INFO -- : Starting the application ...
I, [2015-05-14T01:22:40.226127 #27752]  INFO -- : Gemfile: /home/sqale/current/Gemfile
I, [2015-05-14T01:22:40.230918 #27752]  INFO -- : Application: /home/sqale/current/config.ru
/usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/spec_set.rb:92:in `block in materialize': Could not find rake-10.4.2 in any of the sources (Bundler::GemNotFound)
  from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/spec_set.rb:85:in `map!'
   from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/spec_set.rb:85:in `materialize'
  from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/definition.rb:133:in `specs'
    from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/definition.rb:178:in `specs_for'
  from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/definition.rb:167:in `requested_specs'
   from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/environment.rb:18:in `requested_specs'
  from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/runtime.rb:13:in `setup'
    from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler.rb:119:in `setup'
  from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/setup.rb:17:in `<top (required)>'
   from /usr/local/rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
  from /usr/local/rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'

rakeがないの? なぜ? ローカル側では特に設定変更などはしてないのに・・・。

stackoverflow.com

一応こんな記事はあるが、いかんせんrvmを使っていたので、この際思い切ってrbenvに乗り換えることにしました。

$ rvm seppuku # すごいコマンド名w
# 以下rmv向けの設定を削除
$ vi .bashrc
$ vi .bash_profile
$ vi .zshrc

rbenvをインストール

ホームディレクトリにて

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ mkdir ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
exit

.zshrc.bashrcへの設定を追記。両方やってしまいましたが。

$ vi .zshrc
    export PATH=$HOME/.rbenv/bin:$PATH
    eval "$(rbenv init - zsh)"
$ source ~/.zshrc
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ source ~/.bashrc

ちょっとやり方がまちまちですが、とにかく追記して設定反映させると。

Rubyをインストール

$ rbenv install -lでインストール可能なRubyの一覧を見るのですが、インストールされてないと怒られました。メッセージに従うままに

sudo apt-get install rbenv

や、でもさっきインストールしたはずだよね・・・。ここら辺わけがわからなくて申し訳ないです。

rbenv install -l
rbenv install 2.1.1 --verbose

しかしコケた。

https://github.com/sstephenson/ruby-build/issues/526#issuecomment-37933242

ここを参考にパッチを当てる。

curl -fsSL https://gist.github.com/mislav/a18b9d7f0dc5b9efc162.txt | rbenv install --patch 2.1.1

なんとかインストール通りました。

$ rbenv global 2.1.1
$ exit

$ gem install rbenv-rehash
$ gem install bundle

Railsプロジェクトにて

$ rails s
プログラム 'rails' は以下のパッケージで見つかりました:
 * ruby-railties-3.2
 * ruby-railties-4.0
次の操作を試してください: sudo apt-get install <選択したパッケージ>

と言われたので、おとなしく

$ sudo apt-get install ruby-railties-4.0

また怒られる。

$ bundle
.
.
.
Gem::RemoteFetcher::FetchError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server session ticket A (https://rubygems.global.ssl.fastly.net/gems/libv8-3.16.14.7-x86_64-linux.gem)
An error occurred while installing libv8 (3.16.14.7), and Bundler cannot
continue.
Make sure that `gem install libv8 -v '3.16.14.7'` succeeds before bundling.

なのでこれも言われるがままに

$ gem install libv8 -v '3.16.14.7'

そしてbundle・・・それでもダメだ。うーん2.0.0を入れてみる。

まーたこけやがった。

BUILD FAILED (Ubuntu 14.04 using ruby-build 20150506)

Inspect or clean up the working tree at /tmp/ruby-build.20150514012557.28550
Results logged to /tmp/ruby-build.20150514012557.28550.log

Last 10 log lines:
                                    ^
readline.c: At top level:
readline.c:634:1: warning: ‘readline_pre_input_hook’ defined but not used [-Wunused-function]
 readline_pre_input_hook(void)
 ^
make[2]: *** [readline.o] エラー 1
make[2]: ディレクトリ `/tmp/ruby-build.20150514012557.28550/ruby-2.1.0/ext/readline' から出ます
make[1]: *** [ext/readline/all] エラー 2
make[1]: ディレクトリ `/tmp/ruby-build.20150514012557.28550/ruby-2.1.0' から出ます
make: *** [build-ext] エラー 2

先ほど2.1.1をインストールした際のエラーもこんなのでした。

github.com

ここで「俺の試したパッチは2.1.1用だけど、多分2.0.0でもいけるぜ」的なコメントがあるので、パッチ当ててみる。

curl -fsSL https://gist.github.com/mislav/a18b9d7f0dc5b9efc162.txt | rbenv install --patch 2.1.0
$ rbenv versions
  system
  2.1.0
* 2.1.1 (set by /home/noriyo_tcp/.rbenv/version)

無事インストールできました。


Rakeのバージョン指定

ここでインストールを待っている間、あることに気づきます。 冒頭のエラーではrake-10.4.2がないよと怒られているわけです。
ならばSqale側のrakeはどうなってるのか。
Sqaleのコンソールに入って

$ gem list
.
.
rake (10.1.1, 10.1.0)
.
.

!? そりゃ10.4.2はないわー。ローカル側ではどうか。

$ gem list
.
.
rake (10.4.2, 10.1.0)
.
.

ンゴwww え、2つあるけどどうすんのこれ。現在選択しているバージョンは

$ rake -V
rake, version 10.4.2
$ bundle exec rake --version
rake, version 10.4.2

デュフwww これを10.1.0に切り替えればいいんジャマイカ。

バージョンを指定して実行するやり方はあるけど・・・。どうしよう。

stackoverflow.com

Gemfileに記述しろ、みたいなことが書いてあるので

Gemfile

$ gem 'rake', 10.1.0
$ bundle

すると

You have requested:
  rake = 10.1.0

The bundle currently has rake locked at 10.4.2.
Try running `bundle update rake`

怒られたがな。そういえば上の記事ではbundleじゃなくてbundle updateだった(T_T)

$ bundle update rake
Using rake 10.1.0 (was 10.4.2)

ほう。

$ bundle exec rake --version
rake, version 10.1.0

ほう! Sqale.jpにプッシュ。

I, [2015-05-14T02:28:04.930426 #28306]  INFO -- : Starting the application ...
I, [2015-05-14T02:28:04.935276 #28306]  INFO -- : Gemfile: /home/sqale/current/Gemfile
I, [2015-05-14T02:28:04.939809 #28306]  INFO -- : Application: /home/sqale/current/config.ru
/usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/spec_set.rb:92:in `block in materialize': Could not find i18n-0.7.0 in any of the sources (Bundler::GemNotFound)
  from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/spec_set.rb:85:in `map!'
   from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/spec_set.rb:85:in `materialize'
  from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/definition.rb:133:in `specs'
    from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/definition.rb:178:in `specs_for'
  from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/definition.rb:167:in `requested_specs'
   from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/environment.rb:18:in `requested_specs'
  from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/runtime.rb:13:in `setup'
    from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler.rb:119:in `setup'
  from /usr/local/rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/setup.rb:17:in `<top (required)>'
   from /usr/local/rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
  from /usr/local/rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'

ンゴオオオオオオ 今度は「i18nが見つからん」と。一難去ってまた一難とはまさにこのことか・・・。

ここでRubyのバージョンを変えてみる。

$ rbenv local 2.1.0
$ ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]

そのままプッシュ。

$ git push sqale master 
Everything up-to-date

・・・詰んだな。

f:id:noriyo_tcp:20150514140645j:plain

その後は冒頭で説明したとおりです。なのでrakeのバージョン指定とか全くいらないのではないかと・・・。


その他参考記事:

ruby on rails - Could not find rake-10.4.2 in any of the sources (Bundler::GemNotFound) - Stack Overflow

Ubuntuに rbenv と ruby-build を再インストール。パッケージでバージョン変更できなくなったので・・。 | びーおーぷんどっとねっと

mas-lab.blog: RVMからrbenvにMac・Ubuntu・Windowsを移行した

Qoosky - rbenvおよびbundlerの基本的な使用方法

Ubuntu 14.04にrbenvでRubyをインストールする - ksino's diary