我们正在将我们的应用程序从Rails 2升级到Rails 3.1,而我遇到了资产管道问题。
我在config / application.rb中有以下内容:
if defined?(Bundler)
Bundler.require *Rails.groups(:assets => %w(development test))
# Bundler.require(:default, :assets, Rails.env)
end
# Enable the asset pipeline
config.assets.enabled = true
# config.assets.prefix = "/assets"
config.assets.paths << "#{Rails.root}/public/images"
config.assets.paths << "#{Rails.root}/public/stylesheets"
config.assets.paths << "#{Rails.root}/public/javascripts"
config.assets.version = '1.0'
然后在development.rb
中# Do not compress assets
config.assets.compress = false
config.assets.debug = true
我知道这不是管道所需的行为,但我们这样做是为了确保当我们将升级合并到我们的主分支时,所有旧文件都会被正确考虑。
然后我在public / stylesheets目录中有以下文件“all.css”:
/*
*= require ezform
*= require jquery-ui-1.8.9.custom
*= require thickbox
*= require yui-upload
*= require styles
*/
我在layouts / application.html.erb文件中调用它,如下所示:
<%= stylesheet_link_tag "all" %>
在浏览器中加载东西,然而,我没有样式(或javascript,就此而言)。 Firebug和Chrome告诉我.css和.js文件正在“/ assets”中查找 - 就像管道没有搜索所有内容并按照它应该捆绑它一样。
错误如下所示:
GET http://localhost:3000/assets/jquery-dependent.js 500 (Internal Server Error)
如果我将“all.css”移动到/ app / assets中,它仍然无法找到它。将它移动到/ assets会停止错误,但样式表无法编译,我仍然没有在浏览器中获得任何样式。
在我的日志中还有一系列错误:
Started GET "/assets/defaults.js?body=1" for 127.0.0.1 at 2011-12-22 14:35:36 -0600
[2011-12-22 14:35:36] ERROR NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
/Users/kevin/.rvm/gems/ruby-1.9.2-p0@media3/gems/rack-1.3.5/lib/rack/handler/webrick.rb:71:in `service'
/Users/kevin/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
/Users/kevin/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
/Users/kevin/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'
cache: [GET /assets/defaults.js?body=1] miss, store
Served asset /defaults.js - 200 OK (1ms)
我错过了什么?
答案 0 :(得分:1)
叹息这是memcached。我把它弄好了(memcached -d),现在我的所有资产都出现了。我不知道为什么,所以我喜欢一些解释。否则,它正在运作。
答案 1 :(得分:0)
需要将一堆设置添加到开发和应用程序配置文件中,以使管道正常工作。
查看pipeline guide的最后一部分了解详情。
完成后我建议您将清单名称更改为application.css和application.js,因为这些是默认名称,从这些开始,您将遇到更少的问题。编辑你的问题,如果它仍然无效,我会在那之后看看我是否可以提供帮助。