LoginSignup
28

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-01-02

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

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

にて

このやり方でやると、私の環境では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

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
28