rails c とかが動かなかった原因は、rake rails:update してなかったから というオチ

  • 22
    Like
  • 1
    Comment
More than 1 year has passed since last update.

先日、うまく動かなかった件について

「システムのgemにrailsをインストールせずrails newする」

http://qiita.com/rojiuratech/items/db35abd15f366f9b4db0

にて

このやり方でやると、私の環境ではrails generate がうまく動きませんでした!

と書いてますが、いろいろ対応したら実施できたので報告。

環境と前提

  • このプロジェクト用にbundler でgemを管理している
  • mac os X (El Capitan ) rbenv - ruby 2.2.3
  • Railsもbundlerでインストールしており、 4.2.5である。
  • bundlerでインストールしたrailsを使って操作を行う

こんなエラーがでる

ところが、ちょっとコマンドをいれてもエラーが出る。

  • $ bundle exec rails c
  • $ bundle exec rails g (以下略)

とか、入れたりすると

terminal

/Users/rojiuratech/.rbenv/versions/2.2.3/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- bundler/setup (LoadError)
    from /Users/rojiuratech/.rbenv/versions/2.2.3/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /Users/rojiuratech/Documents/ruby/rails_dev/relate/vendor/bundle/ruby/2.2.0/gems/spring-1.6.1/lib/spring/commands.rb:33:in `<module:Spring>'
    from /Users/rojiuratech/Documents/ruby/rails_dev/relate/vendor/bundle/ruby/2.2.0/gems/spring-1.6.1/lib/spring/commands.rb:4:in `<top (required)>'
    from /Users/rojiuratech/.rbenv/versions/2.2.3/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /Users/rojiuratech/.rbenv/versions/2.2.3/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /Users/rojiuratech/Documents/ruby/rails_dev/relate/vendor/bundle/ruby/2.2.0/gems/spring-1.6.1/lib/spring/application.rb:77:in `preload'
    from /Users/rojiuratech/Documents/ruby/rails_dev/relate/vendor/bundle/ruby/2.2.0/gems/spring-1.6.1/lib/spring/application.rb:143:in `serve'
    from /Users/rojiuratech/Documents/ruby/rails_dev/relate/vendor/bundle/ruby/2.2.0/gems/spring-1.6.1/lib/spring/application.rb:131:in `block in run'
    from /Users/rojiuratech/Documents/ruby/rails_dev/relate/vendor/bundle/ruby/2.2.0/gems/spring-1.6.1/lib/spring/application.rb:125:in `loop'
    from /Users/rojiuratech/Documents/ruby/rails_dev/relate/vendor/bundle/ruby/2.2.0/gems/spring-1.6.1/lib/spring/application.rb:125:in `run'
    from /Users/rojiuratech/Documents/ruby/rails_dev/relate/vendor/bundle/ruby/2.2.0/gems/spring-1.6.1/lib/spring/application/boot.rb:18:in `<top (required)>'
    from /Users/rojiuratech/.rbenv/versions/2.2.3/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /Users/rojiuratech/.rbenv/versions/2.2.3/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from -e:1:in `<main>'

springの不具合?(では、なかったようだ)

上記エラーログにも、springの文字があり、また実際にspringを停止して再起動したら直ったとかというケースもあった。

試してみた。

$ bundle exec spring stop
Spring stopped.
$ bundle exec bin/spring
Version: 1.6.1

Usage: spring COMMAND [ARGS]

Commands for spring itself:

  binstub         Generate spring based binstubs. Use --all to generate a binstub for all known commands. Use --remove to revert.
  help            Print available commands.
  status          Show current status.
  stop            Stop all spring processes for this project.

Commands for your application:

  rails           Run a rails command. The following sub commands will use spring: console, runner, generate, destroy, test.
  rake            Runs the rake command

注: もちろん、bundlerでインストールしたものを操作する。 bin/spring と指定しないとダメみたい。

だが、私の環境では、これではダメだったようだ。

追記:springは止めてもすぐ再起動します

terminal
$ bundle exec bin/spring status
Spring is running:

27741 spring server | relate | started 5 mins ago  
27816 spring app    | relate | started 4 mins ago | development mode   

bundler をこのRailsプロジェクトのために入れる (多分違う)

インストールを行った際に、bundler自体はrbenvに紐付いているものを使っていたが、これが原因と疑った。

$ GEM_HOME=vendor/bundle gem install bundler --no-document

こんな感じでコマンド入力。

これもだめだった。

rake rails:update を実施 -> 正解

terminal
$ bundle exec rake rails:update
   identical  config/boot.rb
       exist  config
   identical  config/routes.rb
   identical  config/application.rb
   identical  config/environment.rb
    conflict  config/secrets.yml
Overwrite /Users/rojiuratech/Documents/ruby/rails_dev/relate/config/secrets.yml? (enter "h" for help) [Ynaqdh] Y
       force  config/secrets.yml
       exist  config/environments
   identical  config/environments/development.rb
   identical  config/environments/production.rb
   identical  config/environments/test.rb
       exist  config/initializers
   identical  config/initializers/assets.rb
   identical  config/initializers/backtrace_silencers.rb
   identical  config/initializers/cookies_serializer.rb
   identical  config/initializers/filter_parameter_logging.rb
   identical  config/initializers/inflections.rb
   identical  config/initializers/mime_types.rb
   identical  config/initializers/session_store.rb
   identical  config/initializers/wrap_parameters.rb
       exist  config/locales
   identical  config/locales/en.yml
       exist  bin
   identical  bin/bundle
    conflict  bin/rails
Overwrite /Users/rojiuratech/Documents/ruby/rails_dev/relate/bin/rails? (enter "h" for help) [Ynaqdh] Y
       force  bin/rails
    conflict  bin/rake
Overwrite /Users/rojiuratech/Documents/ruby/rails_dev/relate/bin/rake? (enter "h" for help) [Ynaqdh] Y
       force  bin/rake
   identical  bin/setup

bin/rails の記載が変更されていた

差分とってみたら、書き換えられていた

古いもの

rails
#!/usr/bin/env ruby

begin
  load File.expand_path('../spring', __FILE__)
rescue LoadError => e
  raise unless e.message.include?('spring')
end

APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
require 'rails/commands'

新しいもの

rails
#!/usr/bin/env ruby

APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
require 'rails/commands'

設定変えたのだから、更新しなきゃ。といった
至極当たり前なオチ。

参考

検索していたらヒットした。問題がことなり対応方法が似ていた。

rails s が動かなくなった
http://ch.nicovideo.jp/MaxMEllon/blomaga/ar668867