Saturday, September 2, 2017

Can't dup NilClass on rails rake with assets:precompile

Leave a Comment

When I try to precompile my assets I get the following error. This is the trace with the full output:

RAILS_ENV=production bundle exec rake assets:precompile --trace ** Invoke assets:precompile (first_time) ** Invoke assets:environment (first_time) ** Execute assets:environment ** Invoke environment (first_time) ** Execute environment rake aborted! TypeError: can't dup NilClass /var/lib/gems/2.3.0/gems/redis-activesupport-5.0.3/lib/active_support/cache/redis_store.rb:38:in `dup' /var/lib/gems/2.3.0/gems/redis-activesupport-5.0.3/lib/active_support/cache/redis_store.rb:38:in `map' /var/lib/gems/2.3.0/gems/redis-activesupport-5.0.3/lib/active_support/cache/redis_store.rb:38:in `initialize' /var/lib/gems/2.3.0/gems/activesupport-5.0.5/lib/active_support/cache.rb:60:in `new' /var/lib/gems/2.3.0/gems/activesupport-5.0.5/lib/active_support/cache.rb:60:in `lookup_store' /var/lib/gems/2.3.0/gems/railties-5.0.5/lib/rails/application/bootstrap.rb:64:in `block in <module:Bootstrap>' /var/lib/gems/2.3.0/gems/railties-5.0.5/lib/rails/initializable.rb:30:in `instance_exec' /var/lib/gems/2.3.0/gems/railties-5.0.5/lib/rails/initializable.rb:30:in `run' /var/lib/gems/2.3.0/gems/railties-5.0.5/lib/rails/initializable.rb:55:in `block in run_initializers' /usr/lib/ruby/2.3.0/tsort.rb:228:in `block in tsort_each' /usr/lib/ruby/2.3.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component' /usr/lib/ruby/2.3.0/tsort.rb:431:in `each_strongly_connected_component_from' /usr/lib/ruby/2.3.0/tsort.rb:349:in `block in each_strongly_connected_component' /usr/lib/ruby/2.3.0/tsort.rb:347:in `each' /usr/lib/ruby/2.3.0/tsort.rb:347:in `call' /usr/lib/ruby/2.3.0/tsort.rb:347:in `each_strongly_connected_component' /usr/lib/ruby/2.3.0/tsort.rb:226:in `tsort_each' /usr/lib/ruby/2.3.0/tsort.rb:205:in `tsort_each' /var/lib/gems/2.3.0/gems/railties-5.0.5/lib/rails/initializable.rb:54:in `run_initializers' /var/lib/gems/2.3.0/gems/railties-5.0.5/lib/rails/application.rb:352:in `initialize!' /home/alex/Dev/livingrecipe/config/environment.rb:5:in `<top (required)>' /var/lib/gems/2.3.0/gems/activesupport-5.0.5/lib/active_support/dependencies.rb:293:in `require' /var/lib/gems/2.3.0/gems/activesupport-5.0.5/lib/active_support/dependencies.rb:293:in `block in require' /var/lib/gems/2.3.0/gems/activesupport-5.0.5/lib/active_support/dependencies.rb:259:in `load_dependency' /var/lib/gems/2.3.0/gems/activesupport-5.0.5/lib/active_support/dependencies.rb:293:in `require' /var/lib/gems/2.3.0/gems/railties-5.0.5/lib/rails/application.rb:328:in `require_environment!' /var/lib/gems/2.3.0/gems/railties-5.0.5/lib/rails/application.rb:448:in `block in run_tasks_blocks' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:250:in `block in execute' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:250:in `each' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:250:in `execute' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:194:in `block in invoke_with_call_chain' /usr/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:187:in `invoke_with_call_chain' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:180:in `invoke' /var/lib/gems/2.3.0/gems/sprockets-rails-3.2.0/lib/sprockets/rails/task.rb:62:in `block (2 levels) in define' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:250:in `block in execute' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:250:in `each' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:250:in `execute' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:194:in `block in invoke_with_call_chain' /usr/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:187:in `invoke_with_call_chain' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:216:in `block in invoke_prerequisites' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:214:in `each' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:214:in `invoke_prerequisites' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:193:in `block in invoke_with_call_chain' /usr/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:187:in `invoke_with_call_chain' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:180:in `invoke' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/application.rb:152:in `invoke_task' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/application.rb:108:in `block (2 levels) in top_level' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/application.rb:108:in `each' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/application.rb:108:in `block in top_level' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/application.rb:117:in `run_with_threads' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/application.rb:102:in `top_level' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/application.rb:80:in `block in run' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/application.rb:178:in `standard_exception_handling' /var/lib/gems/2.3.0/gems/rake-12.0.0/lib/rake/application.rb:77:in `run' /var/lib/gems/2.3.0/gems/rake-12.0.0/exe/rake:27:in `<top (required)>' /usr/local/bin/rake:23:in `load' /usr/local/bin/rake:23:in `<main>' 

So unfortunately I can't figure out where the error is pointing to as none of the code is my stuff and mainly the trace consists of code from the default gems. The one thing that I can see that I have added in there is the bootstrap gem, but the same thing happens even if I take that out.

4 Answers

Answers 1

It looks like you have incorrect redis connection (or setup)

To debug it:

1) Debug redis connection with in rails console. Using Redis from your application

>> require 'rubygems' => false >> require 'redis' => true >> r = Redis.new => #<Redis client v2.2.1 connected to redis://127.0.0.1:6379/0 (Redis v2.3.8)> >> r.ping => "PONG" >> r.set('foo','bar') => "OK" >> r.get('foo') => "bar" 

2) Debug RedisStore

RedisStore.new("localhost:6379/0/cache", expires_in: 90.minutes) 

3) If the command passed, set up this config for your app like it's described in gem redis-rails

# config/application.rb config.cache_store = :redis_store, "redis://localhost:6379/0/cache", { expires_in: 90.minutes } 

4) Play with configuration a little to establish successful connection to redis (And don't forget about different environment configs in production!!!)

5) Commit changes, redeploy.

Answers 2

You're trying to compile assets in the production environment, but you're also on your dev machine. Are you sure you've configured a production environment in all of your config files? Look in config/cable.yml and config/redis.yml if they exist.

Alternatively, a good way to compile assets in the development environment is:

RAILS_ENV=development bundle exec rake assets:precompile 

However, after doing this, Rails will use these compiled assets in development instead of your assets in app/assets. Eventually, you'll also want to run RAILS_ENV=development bundle exec rake assets:clobber or rm -rf public/assets to clear your development environment of these compiled assets.

Answers 3

from the stack trace you submitted, it looks like you should check the value of

config.cache_store 

it most probably empty:

https://github.com/rails/rails/blob/87eb1a26da0b1385af07a8347dcfd32998a614ee/railties/lib/rails/application/bootstrap.rb#L67

Answers 4

So not sure what the problem was, but i updated ruby, rails and all my gems and that got rid of the problem. So thinking it was a compatibility issue with version mismatch somewhere

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment