无法通过资产复制NilClass:预编译

时间:2017-08-21 00:02:27

标签: ruby-on-rails ruby

当我尝试预编译资产时,出现以下错误。这是具有完整输出的跟踪:

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>'

所以不幸的是我无法弄清楚错误指向的位置,因为没有任何代码是我的东西,主要是跟踪由默认宝石的代码组成。我可以看到我添加的一件事就是引导宝石,但即使我把它拿出来也会发生同样的事情。

4 个答案:

答案 0 :(得分:0)

看起来你的redis连接(或设置)不正确

调试它:

1)使用rails控制台调试redis连接。 https://graph.facebook.com/2.10/{group-id}/feed

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

2)调试Using Redis from your application

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

3)如果命令已通过,请为您的应用设置此配置,如RedisStore

中所述
String str = "server=localhost;database=population;username=root;password=hello;Convert Zero Datetime=true;";
    MySqlConnection con = new MySqlConnection(str);
    string col1 = col.Text;
    string newval1=newval.Text;
    string val1=val.Text;
          try
          {
          con.Open();

            MySqlCommand cmd = new MySqlCommand("Update npanxx set '"+ col1 +"'='" + newval1 + "' WHERE NPA_NXX= '" + val1 + "'", con);
            MySqlCommand cmd = new MySqlCommand(cmdstr, con);
           cmd.ExecuteNonQuery();
           con.Close();

          }
    catch(Exception err)
    {
        MessageBox.Show(err.ToString());
    }

4)稍微配置一下以建立与redis的成功连接(并且不要忘记生产中的不同环境配置!!!)

5)提交更改,重新部署。

答案 1 :(得分:0)

您正在尝试在生产环境中编译资产,但您也在您的开发计算机上。您确定已在所有配置文件中配置了生产环境吗?查看config / cable.yml和config / redis.yml(如果存在)。

或者,在开发环境中编译资产的好方法是:

RAILS_ENV=development bundle exec rake assets:precompile

但是,执行此操作后,Rails将在开发中使用这些编译资产,而不是app / assets中的资产。最后,您还需要运行RAILS_ENV=development bundle exec rake assets:clobberrm -rf public/assets来清除这些已编译资产的开发环境。

答案 2 :(得分:0)

从您提交的堆栈跟踪中,看起来您应该检查

的值
config.cache_store

它很可能是空的:

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

答案 3 :(得分:0)

所以不确定问题是什么,但我更新了ruby,rails和我所有的宝石,并解决了这个问题。所以认为这是版本不匹配的兼容性问题