先日、うまく動かなかった件について
「システムの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 (以下略)
とか、入れたりすると
/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は止めてもすぐ再起動します
$ 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 を実施 -> 正解
$ 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 の記載が変更されていた
差分とってみたら、書き換えられていた
古いもの
#!/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'
新しいもの
#!/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