LoginSignup
19
17

More than 5 years have passed since last update.

<class:Railtie>': undefined method `register_preprocessor' for nil:NilClass (NoMethodError) - bundle updateしたら、「sprocket-rails」が 3.0.0になってハマった

Last updated at Posted at 2015-12-23

環境

  • Ruby 2.2.3
  • Rails 4.2.4

概要

2015/12/23、bundle updateをしてから、gemでbootstrapを入れようと思って作業していたら、railsコマンドでエラーが出るようになった。

1. 問題
railsコマンドを叩くとエラーが発生し、実行できなくなった

error
$ rails s
.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/less-rails-2.7.0/lib/less/rails/railtie.rb:19:in `block in <class:Railtie>': undefined method `register_preprocessor' for nil:NilClass (NoMethodError)

2. 想定される原因
エラーが出るようになる前に、今回行った作業は下記2点

  • bundle update
  • 'therubyracer', 'less-rails', 'twitter-bootstrap-rails'をbundle install

bootstrapに関する上記3点のgemを取り除けば、railsコマンドは正常に動くようだ。

3. 原因の特定
2015/12/18にリリースされたばかりのsprockets-rails 3.0.0と、今回インストールしたless-rails-2.7.0との相性が悪いみたい。

4. 対策と問題解決
sprocket-railsをダウングレード

では、順を追って、詳細を書いていきます。

1. 問題

railsコマンドを叩くとエラーが発生し、実行できなくなった

bundle updateを行った後、
bootstrapのインストールをしようとしたらエラーが出た。

$ rails generate bootstrap:install less

.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/less-rails-2.7.0/lib/less/rails/railtie.rb:19:in `block in <class:Railtie>': undefined method `register_preprocessor' for nil:NilClass (NoMethodError)

less-rails-2.7.0/lib/less/rails/railtie.rbの19行目の、register_preprocessorってメソッドがundefinedだよっていうエラー。

Gemfileに追加した記述は、bootstrapインストールのための下記3つ。

Gemfile
gem 'therubyracer'
gem 'less-rails'
gem 'twitter-bootstrap-rails'

ちなみに他のrailsコマンドでもエラーが出る。

error
$ rails s

.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/less-rails-2.7.0/lib/less/rails/railtie.rb:19:in `block in <class:Railtie>': undefined method `register_preprocessor' for nil:NilClass (NoMethodError)

2. 想定される原因

エラーが出るようになる前に、今回行った作業

  • bundle update
  • 'therubyracer','less-rails','twitter-bootstrap-rails'をbundle install

bootstrapに関する上記3点のgemを取り除けば、railsコマンドは正常に動くようだ。

3. 原因の特定

いろいろと調べていたところ、どうやら5日前(2015/12/18)あたりにリリースされたばかりのsprockets-rails 3.0.0と、今回インストールしたless-rails-2.7.0との相性が悪いみたい。
[参考]Doesn't work with sprocket-rails v3.0

sprocket-railsのgithubで、5日前(2015/12/18)に下記のコミットログあり。
[github]https://github.com/rails/sprockets-rails

commit-log
Release 3.0.0
rafaelfranca committed 5 days ago

5日前の2015/12/18にsprockets-rails 3.0.0をリリースしたようだ。

4. 対策と問題解決

sprockets-railsをダウングレード

bundle showをしてみると、sprockets-rails 3.0.0になっていた。

$ bundle show
(略)
  * sprockets-rails (3.0.0)

以前のバージョン2.3.3に下げるため、sprocket-railsのダウングレードを実施。

まずは、3.0.0のアンインストール。

$ gem uninstall sprockets-rails

Select gem to uninstall:
 1. sprockets-rails-2.3.3
 2. sprockets-rails-3.0.0
 3. All versions
> 2

Gemefileで、sprocket-railsのバージョン指定。

Gemfile
gem 'sprockets-rails', '2.3.3'

当然だが、bundle updateしないと怒られるので

$ bundle show
You have requested:
  sprockets-rails = 2.3.3

The bundle currently has sprockets-rails locked at 3.0.0.
Try running `bundle update sprockets-rails`

bundle udpateを実行。

$ bundle update

これで、railsコマンドが使用できるようになりました。
まだ情報が少ないので取り急ぎですが、以上です。

[参考]
Doesn't work with sprocket-rails v3.0
stackoverflow

19
17
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
19
17