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

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

Nitrous.ioでRubyのバージョンを変更する(そしてハマる)

Rails Tutorialも5章に入りましたが、いつものようにrails sしたら、

$ rails s -b 0.0.0.0 -p 4000 # ちょっとこういうオプションつけてます。                                                            
Your Ruby version is 2.1.1, but your Gemfile specified 2.0.0

怒られましたがな。Herokuは2.0.0推奨とのことでGemfileにruby '2.0.0'と記述したんですが、Nitrous.ioでは2.1.1使ってたんだった。

nitrousio - Issue with RVM in Nitrous.io's console - Stack Overflow

Rubyのバージョン管理をrvmからChrubyに変えたようですな。

Getting Started with Ruby

Nitrousにはpartsコマンドというのがあるのですが、しっちゃかめっちゃかした上に、上部にあるAutopartsを使ったので、ここは補足ということで・・・


partsコマンドを使ってインストール

Nitrous.ioで使用するRubyのバージョンを変更する - Qiita

使えるRubyのバージョンを確認。

$ parts search ruby                                                                                                           
chruby (0.3.8)       Chruby: Changes the current ruby                                                                                                              
ruby2.1 (2.2.0)      Ruby 2.2.0: A dynamic programming language with a focus on simplicity and productivity.                                                       
ruby2.0 (2.0.0-p576) Ruby 2.0.0: A dynamic programming language with a focus on simplicity and productivity.                                                       
ruby1.9 (1.9.3-p547) Ruby 1.9.3: A dynamic programming language with a focus on simplicity and productivity.                                                       
ruby2.2 (2.2.0)      Ruby 2.2.0: A dynamic programming language with a focus on simplicity and productivity.                                                       
ruby_install (0.4.1) Ruby Install: Installs Ruby, JRuby, Rubinius, MagLev or MRuby

ここ

ruby2.0 (2.0.0-p576) Ruby 2.0.0: A dynamic programming language with a focus on simplicity and productivity.                                                       

2.0(2.0.0)もあるようですな。

$ parts install ruby2.0

しかし、いつまでたってもActivating...のままで止まっている。ここでかなり困惑です。うーむ。


注意点

f:id:noriyo_tcp:20150210190808p:plain

なのでコマンドでなく上部にあるAutopartsからインストールを試みました。そこでも止まってしまったのですが、よく見るとDONEボタンが出ている。インストールされているのか?

f:id:noriyo_tcp:20150210190955p:plain

chrubyで確認、そして再起動

$ chruby
ruby-2.1.1

のままです。ここでBoxを再起動させてみます。

$ chruby                                                                                                                         
 * ruby-2.0.0-p576                                                                                                                                                 
   ruby-2.1.1                                                                                                                                                      
$ ruby -v                                                                                                                        
ruby 2.0.0p576 (2014-09-19 revision 47628) [x86_64-linux]

入ってるみたいだなあ? Autopartsで見ても、ボタンがuninstallになっているので、インストールされたのだろうと。

f:id:noriyo_tcp:20150210191031p:plain

ホームはこれでいいようですが、ここでアプリに入ってみるとまだ2.1.1のようなので、アプリ側の.ruby-versionに以下のように記述($ echo ruby-2.0.0-p576 > .ruby-versionでやっている例が多いようですがviで直接編集したような希ガスw)

$ ruby-2.0.0-p576

そして確認。

$ ruby -v                                                                               
ruby 2.0.0p576 (2014-09-19 revision 47628) [x86_64-linux]
$ chruby                                                                                
 * ruby-2.0.0-p576                                                                                                                                                 
   ruby-2.1.1

Rubyのバージョンを変更する - New-Village

Rubyはバージョン毎にパッケージを管理しているので、バージョンを変更した際に、使いたいパッケージを再度インストールする必要があります。

ということでパッケージの入れ直しです。

gem入れ直し

Rubyのバージョンを変更する - New-Village

$ gem install railties

としたのですが始まらん・・・どころかKilledされてしまいました。gem install railsでもダメだ。
というわけでいったん、AutopartsでRuby2.0.0を削除して、再起動しました。

そしてまた上記のようにRubyを入れ直して・・・また

$ gem install railties

今度は始まってくれましたが、

Building native extensions.  This could take a while...

で時間がかかっております。しかし忍耐だ。「怠惰・短気・傲慢」なんて嘘っぱちだよね!

やっと通った(T_T)

$ gem which bundler                                                                     
ERROR:  Can't find ruby library file or shared library bundler

bundlerない!うへえ

rails,bundlerどっちから先なんだろ。えーいrailsだ。

$ gem install rails -v 4.2.0

最新のRails Tutorialのバージョンに合わせ、4.2.0をインストール。

始まらん! Cloud IDEのせいなのか。リアクションがどうしても遅いですね。

よし通った! bundlerも入ってるみたいなのでbundleだ! その前に一応Gemfileからruby '2.0.0'を削除しておいてと。

Fetching gem metadata from https://rubygems.org/.........                                                                                                          
Fetching version metadata from https://rubygems.org/..

うん、時間かかってるぞ!

おお、rakeインストールして・・・いいぞ!その調子だ!(テンションがおかしくなってる)

今まで使っていたgemの数々を・・・数々をインストールしてくれていますぞ〜。

よっしゃ! rails sだぞコンチクショー!

うん・・・。

Warning: You're using Rubygems 2.0.14 with Spring. Upgrade to at least Rubygems 2.1.0 and run `gem pristine --all` for better startup performance.

なんか怒られているが、なんとか表示できてるぞ。そういえばSpringを使うようにしてたんだっけ。

f:id:noriyo_tcp:20150210191256p:plain

RubyGemsをupdate

RubyGemsのアップデート - Railsインストール

$ gem -v # version確認                                                                                
2.0.14 
$ gem update --system # アップデート

その後

$ gem -v                                                                                
2.4.5
$ gem pristine --all

gem pristineに関しては

Rubyのパッケージマネジメントシステムgem(Rubygems)のコマンド一覧

gem pristine gemの隠し場所にあるファイルからインストールしたgemを初期状態へ戻す

study-note/gemのpristine.md at master · YuheiNakasaka/study-note · GitHub

gem pristineとはgemの隠し場所にあるファイルからインストールしたgemを初期状態へ戻す、ことができる。

つまり、gemのcacheを消して元の初期状態としてインストールし直すという意味。

すると・・・

Building native extensions.  This could take a while...

またお前か。しかし忍耐。

一応通ったがしかし、nokogiri関係で怒られとる。え、でも今は必要ないんだよなあ・・・。

Team Nokogiri will keep on doing their best to provide security                                                                                                    
updates in a timely manner, but if this is a concern for you and want                                                                                              
to use the system library instead; abort this installation process and                                                                                             
reinstall nokogiri as follows:                                                                                                                                     
                                                                                                                                                                   
    gem install nokogiri -- --use-system-libraries                                                                                                                 
        [--with-xml2-config=/path/to/xml2-config]                                                                                                                  
        [--with-xslt-config=/path/to/xslt-config]                                                                                                                  
                                                                                                                                                                   
If you are using Bundler, tell it to use the option:                                                                                                               
                                                                                                                                                                   
    bundle config build.nokogiri --use-system-libraries                                                                                                            
    bundle install

Bundler使ってるなら、このオプションつけてみな! みたいに言われているので

$ bundle config build.nokogiri --use-system-libraries
$ bundle install

忍耐の末・・・通った・・・。

...
Installing nokogiri 1.6.6.2
...

インストールもされているようだ、がしかしrails sすると

Warning: Running `gem pristine --all` to regenerate your installed gemspecs (and deleting then reinstalling your bundle if you use bundle --path) will improve the 
startup performance of Spring.

んーまたなんか言われているが、画面は表示されているぞ。つ、疲れた・・・。

Springに関するWARNING

Railsの開発効率をあげる - Springを使ってRailsのコンソールコマンドの実行を早くする - Rails Webook

Rails - spring を使ってテスト高速化 - Qiita

bin/spring が新規追加され、bin/rails, bin/rake にspringをloadするコードが追加される。

んー、それはよさそうなんだけどなあ・・・警告が気になる。

ruby on rails - Warning: Running `gem pristine --all` to regenerate your installed gemspecs - Stack Overflow

$ rm -rf .bundle && bundle

.bundleという隠しファイルがあるので(アプリのルートディレクトリ内)上記コマンドを打ってみる。

・・・それでも出ますがな。

ついでにhomeのほうの.bundleもさくっと消してしまったw でも相変わらず。どうしようw

結論:あきらメロン

Spring with Rspec and Guard for speedy testing

Long story short, you have to live with with this warning message for now.

「要するに、これからこの警告メッセージと付き合っていかなきゃいけないね!」 みたいな?
まあエラーではないんだけど・・・。

ここまでに何時間もかかった・・・そんなバナナ・・・。


ついでに

chruby と ruby-install で複数バージョンの Ruby を切り替えて使う (Ubuntu 編) - Rails 雑感 - Ruby on Rails with OIAX

Ruby の切り替え方法は2種類あります。1つは chruby 2.1.2 のようにコマンドで切り替える方法、もう1つはディレクトリに .ruby-version という隠しファイルを作って、そこにバージョン番号を書いておくという方法です。後者の方法を採用した場合、その隠しファイルが存在するディレクトリおよびそのサブディレクトリでのみ、そこに書かれたバージョン番号の Ruby が使用されます。

アプリごとにデフォルトで使用するバージョンを使いわけることもできるわけですな。例えば

~/workspace/sample_app$ echo ruby-2.0.0-p576 > .ruby-version

sample_appでは2.0.0を使いますよ。ということもできる。


その他参考記事:

Gamburtsev: [memo] Terminal を開くとchruby: unknown Ruby: 2.0.0-p195