Rails 3.1.1资产预编译 - rake中止

10

编辑:还有人有什么建议吗?我完全被卡住了!!!

我有一个应用程序,其中所有资源都可以编译正常,但在这个第二个应用程序中,当我运行:

RAILS_ENV=production rake assets:precompile --trace

我收到了以下消息:undefined method `directory?' for nil:NilClass

请帮忙解决。当我查看public/assets目录时,发现图像文件已经预编译,但是没有js或css文件。

以下是完整的终端输出:

=> RAILS_ENV=production rake assets:precompile --trace
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53: warning: already initialized constant WFKV_
** Invoke assets:precompile (first_time)
** Execute assets:precompile
/Users/swamiatma/.rvm/rubies/ruby-1.9.2-p290/bin/ruby /Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets --trace
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53: warning: already initialized constant WFKV_
** Invoke assets:precompile:all (first_time)
** Execute assets:precompile:all
** Invoke assets:precompile:primary (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
** Invoke tmp:cache:clear (first_time)
** Execute tmp:cache:clear
** Execute assets:precompile:primary
rake aborted!
undefined method `directory?' for nil:NilClass
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/sprockets-2.0.2/lib/sprockets/base.rb:122:in `block in each_entry'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/sprockets-2.0.2/lib/sprockets/base.rb:118:in `each'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/sprockets-2.0.2/lib/sprockets/base.rb:118:in `each_entry'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/sprockets-2.0.2/lib/sprockets/base.rb:137:in `block in each_file'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/sprockets-2.0.2/lib/sprockets/base.rb:136:in `each'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/sprockets-2.0.2/lib/sprockets/base.rb:136:in `each_file'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/sprockets-2.0.2/lib/sprockets/base.rb:149:in `each_logical_path'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/actionpack-3.1.1/lib/sprockets/static_compiler.rb:18:in `compile'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/actionpack-3.1.1/lib/sprockets/assets.rake:52:in `internal_precompile'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/actionpack-3.1.1/lib/sprockets/assets.rake:66:in `block (3 levels) in <top (required)>'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:205:in `call'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:205:in `block in execute'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:200:in `each'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:200:in `execute'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/Users/swamiatma/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:144:in `invoke'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/actionpack-3.1.1/lib/sprockets/assets.rake:56:in `block (3 levels) in <top (required)>'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:205:in `call'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:205:in `block in execute'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:200:in `each'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:200:in `execute'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/Users/swamiatma/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:144:in `invoke'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:112:in `invoke_task'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:90:in `block (2 levels) in top_level'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:90:in `each'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:90:in `block in top_level'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_exception_handling'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:84:in `top_level'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:62:in `block in run'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_exception_handling'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:59:in `run'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/bin/rake:32:in `<top (required)>'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/bin/rake:19:in `load'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/bin/rake:19:in `<main>'
Tasks: TOP => assets:precompile:primary
rake aborted!
Command failed with status (1): [/Users/swamiatma/.rvm/rubies/ruby-1.9.2-p2...]
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_utils.rb:53:in `block in create_shell_runner'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_utils.rb:45:in `call'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_utils.rb:45:in `sh'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_utils_ext.rb:36:in `sh'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_utils.rb:78:in `ruby'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_utils_ext.rb:36:in `ruby'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/actionpack-3.1.1/lib/sprockets/assets.rake:9:in `ruby_rake_task'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/actionpack-3.1.1/lib/sprockets/assets.rake:17:in `invoke_or_reboot_rake_task'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/gems/actionpack-3.1.1/lib/sprockets/assets.rake:25:in `block (2 levels) in <top (required)>'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:205:in `call'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:205:in `block in execute'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:200:in `each'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:200:in `execute'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/Users/swamiatma/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task.rb:144:in `invoke'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:112:in `invoke_task'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:90:in `block (2 levels) in top_level'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:90:in `each'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:90:in `block in top_level'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_exception_handling'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:84:in `top_level'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:62:in `block in run'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_exception_handling'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/application.rb:59:in `run'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/bin/rake:32:in `<top (required)>'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/bin/rake:19:in `load'
/Users/swamiatma/.rvm/gems/ruby-1.9.2-p290@lasource/bin/rake:19:in `<main>'
Tasks: TOP => assets:precompile

1
我猜测你在配置方面出了问题,可能是路径输错了之类的。我会执行 bundle open sprockets 命令并添加一些调试输出来查看是哪个路径引起了错误。 - phoet
你能给我一个例子,如何在Sprockets中进行调试吗? - allesklar
1
你可以使用bundle open sprockets命令,然后使用你最喜欢的文本编辑器添加puts语句、调试代码或者pry调试工具等,以满足你的需求。 - phoet
你一定是个非常优秀的程序员。我很愿意学习,但我不确定在哪里放置语句。在sprockets中有很多文件和大量代码,我无法确定在哪里放置puts语句以及确切要输出什么。你能给我更多的指导吗? - allesklar
没关系,我意识到跟踪指向了base.rb的第122行。傻瓜 - allesklar
2个回答

6

感谢phoet:我刚在.bundle/ruby/1.9.1/gems/sprockets-2.0.2/lib/sprockets/base.rb中加入了begin..rescue块,错误是由于一个无效的符号链接引起的(仅在Rails 3.1.1 Sprockets 2.0.2的生产环境中,另外Rack 1.3.4会导致constant WFKV_警告,但Rack 1.3.3则不会)。

120  paths << path
121  begin
122    if stat(path).directory?
123      each_entry(path) do |subpath|
124        paths << subpath
125      end
126    end
127  rescue
128    puts "error with directory #{path}"
129  end

现在错误已经消失了,bundle exec rake assets:precompile --trace执行结束,但是在最后两个步骤** Execute assets:precompile:primary之后需要等待很长时间...我们拭目以待 ;)


这里的关键词是“损坏的符号链接”。 - givanse

3

感谢Phoet的建议,我在sprockets的基本文件中添加了一个puts语句,从而找出了罪魁祸首文件。这是一个ckeditor js文件。我已经将ckeditor移出管道,在公共目录中,但这个文件还是被调用了。我仍然不知道为什么。但是我在assets/javascripts目录中放置了一个虚拟的ckeditor.js文件,就足以解决我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接