新的Rails应用程序加载资产失败

问题描述:

我试图获得一个全新的骨架应用程序在rails 3.1.0.rc8中运行。但是,无论何时在视图中使用任何资产标签/帮助程序(例如image_tag,javascript_include_tag等),我都会收到资产编译错误。当我直接请求/assets/rails.png时,以下是我的logs/development.log片段。新的Rails应用程序加载资产失败

Started GET "/assets/rails.png" for 192.168.0.12 at Mon Aug 29 16:16:21 -0600 2011 
Error compiling asset rails.png: 
ArgumentError: wrong number of arguments (2 for 1) 

activesupport (3.1.0.rc8) lib/active_support/cache/file_store.rb:101:in `respond_to?' 
activesupport (3.1.0.rc8) lib/active_support/cache/file_store.rb:101:in `dump' 
activesupport (3.1.0.rc8) lib/active_support/cache/file_store.rb:101:in `write_entry' 
activesupport (3.1.0.rc8) lib/active_support/core_ext/file/atomic.rb:20:in `atomic_write' 
activesupport (3.1.0.rc8) lib/active_support/cache/file_store.rb:101:in `write_entry' 
activesupport (3.1.0.rc8) lib/active_support/cache/strategy/local_cache.rb:140:in `write_entry' 
activesupport (3.1.0.rc8) lib/active_support/cache.rb:364:in `write' 
activesupport (3.1.0.rc8) lib/active_support/cache.rb:520:in `instrument' 
activesupport (3.1.0.rc8) lib/active_support/cache.rb:362:in `write' 
sprockets (2.0.0.beta.15) lib/sprockets/caching.rb:117:in `cache_set' 
sprockets (2.0.0.beta.15) lib/sprockets/caching.rb:80:in `cache_set_hash' 
sprockets (2.0.0.beta.15) lib/sprockets/caching.rb:51:in `cache_asset' 
sprockets (2.0.0.beta.15) lib/sprockets/environment.rb:82:in `build_asset' 
sprockets (2.0.0.beta.15) lib/sprockets/trail.rb:102:in `find_asset_in_path' 
sprockets (2.0.0.beta.15) lib/sprockets/base.rb:102:in `find_asset' 
sprockets (2.0.0.beta.15) lib/sprockets/environment.rb:72:in `find_asset' 
sprockets (2.0.0.beta.15) lib/sprockets/server.rb:42:in `call' 
rack-mount (0.8.2) lib/rack/mount/prefix.rb:26:in `call' 
rack-mount (0.8.2) lib/rack/mount/route_set.rb:152:in `call' 
rack-mount (0.8.2) lib/rack/mount/code_generation.rb:96:in `recognize' 
rack-mount (0.8.2) lib/rack/mount/code_generation.rb:68:in `optimized_each' 
rack-mount (0.8.2) lib/rack/mount/code_generation.rb:95:in `recognize' 
rack-mount (0.8.2) lib/rack/mount/route_set.rb:141:in `call' 
actionpack (3.1.0.rc8) lib/action_dispatch/routing/route_set.rb:531:in `call' 
actionpack (3.1.0.rc8) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call' 
rack (1.3.2) lib/rack/etag.rb:23:in `call' 
rack (1.3.2) lib/rack/conditionalget.rb:25:in `call' 
actionpack (3.1.0.rc8) lib/action_dispatch/middleware/head.rb:14:in `call' 
actionpack (3.1.0.rc8) lib/action_dispatch/middleware/params_parser.rb:21:in `call' 
actionpack (3.1.0.rc8) lib/action_dispatch/middleware/flash.rb:243:in `call' 
rack (1.3.2) lib/rack/session/abstract/id.rb:195:in `context' 
rack (1.3.2) lib/rack/session/abstract/id.rb:190:in `call' 
actionpack (3.1.0.rc8) lib/action_dispatch/middleware/cookies.rb:326:in `call' 
activerecord (3.1.0.rc8) lib/active_record/query_cache.rb:62:in `call' 
activerecord (3.1.0.rc8) lib/active_record/connection_adapters/abstract/connection_pool.rb:477:in `call' 
actionpack (3.1.0.rc8) lib/action_dispatch/middleware/callbacks.rb:29:in `call' 
activesupport (3.1.0.rc8) lib/active_support/callbacks.rb:392:in `_run_call_callbacks' 
activesupport (3.1.0.rc8) lib/active_support/callbacks.rb:81:in `send' 
activesupport (3.1.0.rc8) lib/active_support/callbacks.rb:81:in `run_callbacks' 
actionpack (3.1.0.rc8) lib/action_dispatch/middleware/callbacks.rb:28:in `call' 
actionpack (3.1.0.rc8) lib/action_dispatch/middleware/reloader.rb:68:in `call' 
rack (1.3.2) lib/rack/sendfile.rb:101:in `call' 

我运行红宝石1.8.7和乘客,如果相关。其他人遇到这个错误?

+1

你还在用Sprockets 2.0.0得到这个吗? –

+0

啊,从2.0.0.beta.15升级到Sprockets 2.0.0。现在一切都很开心。谢谢瑞恩! – dhulihan

通过升级从链轮2.0.0.beta.15到2.0.0修正了这一点:

gem install sprockets -v=2.0.0 

荣誉给Ryan Bigg的帮助。

我通过rake任务编制资产时遇到了同样的问题:花费4小时以上后

$ bundle exec rake assets:precompile --trace 
... 
** Execute assets:precompile:primary 
rake aborted! 
wrong number of arguments (2 for 1) 
/usr/local/lib/ruby/gems/1.8/gems/activesupport-3.2.0/lib/active_support/cache/file_store.rb:91:in `respond_to?' 
/usr/local/lib/ruby/gems/1.8/gems/activesupport-3.2.0/lib/active_support/cache/file_store.rb:91:in `dump' 
... 

,并尝试了很多方法,我发现,它可能是红宝石的问题。 (从这个链接:https://github.com/resolve/refinerycms/issues/538

$ ruby -v 
ruby 1.8.7 (2008-05-31 patchlevel 0) 

这里patchlevel 0是问题。因为我的ruby是从源代码编译的。 (某些原因,我无法从包管理器或通过RVM进行安装)。

解决方案:

  1. 下载从http://ftp.ruby-lang.org/pub/ruby/1.8/新的源文件,例如补丁358,
  2. 编译:

    unzip ruby-1.8.7-p358.zip -d /tmp && cd /tmp/ruby-1.8.7-p358 && ./configure && make && sudo make install 
    
  3. 红宝石现在有一个新的版本:补丁358

    $ ruby -v 
    ruby 1.8.7 (2012-02-08 patchlevel 358) [i686-linux] 
    

    和一切正常!