久しぶりに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しろ・・・ですと?
ここにも書いてある。
つまりただ単に.ruby-version
をgit add
するのを忘れていた、というオチです。
とうわけでもともと2.1.1
を使っていたのでローカル側で戻して、.ruby-version
の内容も確認した上でgit add
,git commit
そしてデプロイ。
Sqale側のコンソールに入ると、まだ2.0.0
のようだったので、rbenv global 2.1.1
をした・・・けどダメだった(rehash
を行ってなかったかも)ので、vi .ruby-version
で2.1.1
に書き換え。
ここでアプリを再起動・・・したかどうかは覚えてないですが、無事サイトは復帰しましたとさ。
ドキュメントちゃんと読め、確認しろということですな・・・。
この場をお借りして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がないの? なぜ? ローカル側では特に設定変更などはしてないのに・・・。
一応こんな記事はあるが、いかんせん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をインストールした際のエラーもこんなのでした。
ここで「俺の試したパッチは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に切り替えればいいんジャマイカ。
バージョンを指定して実行するやり方はあるけど・・・。どうしよう。
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
・・・詰んだな。
その後は冒頭で説明したとおりです。なのでrake
のバージョン指定とか全くいらないのではないかと・・・。
その他参考記事:
Ubuntuに rbenv と ruby-build を再インストール。パッケージでバージョン変更できなくなったので・・。 | びーおーぷんどっとねっと
mas-lab.blog: RVMからrbenvにMac・Ubuntu・Windowsを移行した