LoginSignup
3
3

More than 5 years have passed since last update.

deviseをruby1.9.3より古い環境にインストールする

Last updated at Posted at 2014-08-31

古い環境(ruby1.8.7, rails2.3.10)に、deviseをインストールする際に手こずったのでメモ。
少し長くなるが、いつか誰かの類件の問題解決につながればと、紆余曲折も含め記載しておく。

奮闘記

以前に別のサーバーで動いていたRailsアプリケーションをポーティング。
新規にサーバーを立ち上げ、rubyやrailsをインストールしたり、いろいろごにょごにょ初期設定を済ませ、いざ起動!

失敗。。。(´・ω・`)

[root@host hoge]# ruby ./script/server 
=> Booting WEBrick
=> Rails 2.3.10 application starting on http://0.0.0.0:3000
Missing these required gems:
  warden  
  devise  

You're running:
  ruby 1.8.7.375 at /root/.rbenv/versions/1.8.7-p375/bin/ruby
  rubygems 1.6.2 at /root/.gem/ruby/1.8, /root/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8

Run `rake gems:install` to install the missing gems.

まぁ、そんなにすんなり行くはずもない。
言われた通り、rake gems:installしてみる。

[root@host hoge]# rake gems:install
(in /.../hoge)
gem install warden
Successfully installed warden-1.2.3
1 gem installed
Installing ri documentation for warden-1.2.3...
Installing RDoc documentation for warden-1.2.3...
gem install devise
ERROR:  Error installing devise:
    activesupport requires Ruby version >= 1.9.3.
Building native extensions.  This could take a while...
Building native extensions.  This could take a while...

なにやら、「devise」のインストールには失敗している。
rubyのバージョンを1.9.3.以上にとのこと。
それはできない相談である。

そもそも、rake gem:installでインストールした、「warden」や「devise」はどこで指定されたのか???

コードを探ってみたところ、config.enviroment.rbに怪しい記述が。

config.enviroment.rb
  # Devise用
  config.gem 'warden'
  config.gem 'devise'

バージョンの定義がないことを見ると、最新バージョンを取得しようとしたんだろう。
調べてみたところ、gem install同様バージョン指定もできそうだ。
前に動いていたサーバーにインストールされていたdeviceのバージョンを調べて指定する。

config.enviroment.rb
  # Devise用
  config.gem 'warden'
  config.gem 'devise', :version => '1.0.10'

もう一度、インストール。

[root@host hoge]# rake gems:install
(in /.../hoge)
gem install devise --version "= 1.0.10"
Successfully installed warden-0.10.7
Successfully installed devise-1.0.10
2 gems installed
Installing ri documentation for warden-0.10.7...
Installing ri documentation for devise-1.0.10...
Installing RDoc documentation for warden-0.10.7...
Installing RDoc documentation for devise-1.0.10...

うまくいったようだヽ(・∀・)ノ
いざ、再チャレンジ!

[root@host hoge]# ruby ./script/server 
=> Booting WEBrick
=> Rails 2.3.10 application starting on http://0.0.0.0:3000
Missing these required gems:
  devise  = 1.0.10

You're running:
  ruby 1.8.7.375 at /root/.rbenv/versions/1.8.7-p375/bin/ruby
  rubygems 1.6.2 at /root/.gem/ruby/1.8, /root/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8

Run `rake gems:install` to install the missing gems.

。。。( ´ Д ` ;)

deviseなら、さきほどインストールしたではないか!?
インストール時にエラーや警告は出なかった。
gem listにもしっかり存在している。

いろいろ調べたところ、rake gemsでは、未インストールのままだ。

[root@host hoge]# rake gems
(in /.../hoge)
 - [I] warden 
    - [R] rack >= 1.0
 - [ ] devise = 1.0.10

ここで、ハマる。
手動でgemコマンドで再インストールしてみたり、rakeが参照しているgemがおかしいのか疑って調べたり、狂ったようにひたすらインストールを繰り返したり。。。

そして、ダメ元でdeviseのバージョンをruby1.8.7の対応する範囲内で適当に上げてみることにする。
とりあえず、devise2.2.8.でrake gems:install

相変わらず、サーバーは起動できないものの、エラーメッセージに変化が!
rake gemsの表示も変わってる。

[root@host hoge]# rake gems
(in /.../hoge)
 - [I] warden 
    - [R] rack >= 1.0
 - [I] devise = 2.2.8
    - [I] warden ~> 1.2.1
       - [R] rack >= 1.0
    - [I] orm_adapter ~> 0.1
    - [I] bcrypt-ruby ~> 3.0
       - [I] bcrypt >= 3.1.3
    - [ ] railties ~> 3.1

「warden」が「devise」の入れ子でも表示されている。
あらためて、「devise」について調べてみると、どうやら「devise」は「warden」をベースにしているらしい。

依存関係がある「warden」を、先にバージョン未指定(=最新バージョン)でインストールしていた。
そのため、「devise」インストール時に、非対応の「warden」を参照してしまい、インストールに失敗していたのではなかろうか。
入れ子に表示されているのは、依存関係のあるモジュール群ってことか。
見落としていたが、rake gems:installで「devise」をインストールした際、対応する「warden」もしっかりインストールしている。

[root@host hoge]# rake gems:install
(in /.../hoge)
gem install devise --version "= 1.0.10"
Successfully installed warden-0.10.7
  コレ (・_・)↑ 
Successfully installed devise-1.0.10
2 gems installed

ただし、競合処理がうまくいかず、最終的に失敗していたのだろう。

頭の中でいろいろ整理がついたので、いじくる前の環境からリスタート!
この辺りが仮想環境(今回はAWS)の恩恵だ。

今度は、「warden」のバージョンもしっかり指定。

config.enviroment.rb
  # Devise用
  config.gem 'warden', :version => '0.10.7'
  config.gem 'devise', :version => '1.0.10'
[root@host hoge]# rake gems:install
...

[root@host hoge]# rake gems
 - [I] warden = 0.10.7
    - [R] rack >= 1.0.0
 - [I] devise = 1.0.10
    - [I] warden ~> 0.10.3
       - [R] rack >= 1.0.0

O.K!!

いよいよ、サーバー再起動。。。

[root@host hoge]# ruby ./script/server 
=> Booting WEBrick
=> Rails 2.3.10 application starting on http://0.0.0.0:3000

エラーもなく、無事起動(´∀`)ノ
長かった。。。

まとめ

  • railsアプリケーション内で使用するモジュールを、"config.enviroment.rb"で定義できる。
  • "config.enviroment.rb"では、バージョンも指定可能。
  • gem listだけでなく、rake gemsでも確認する
  • rake gemsでは入れ子形式で、依存するモジュールを表示している
  • gemの依存関係にはくれぐれも注意!
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3