rails c とかが動かなかった原因は、rake rails: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 （以下略）

とか、入れたりすると

```bash: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は止めてもすぐ再起動します

```bash: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 を実施　-> 正解

```bash: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 の記載が変更されていた

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


古いもの

```ruby: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'

```

新しいもの

```ruby: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