Rails 3.1资产管道没有看到文件

时间:2011-12-14 23:11:22

标签: ruby-on-rails-3 asset-pipeline

我们正在将我们的应用程序从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)

我错过了什么?

2 个答案:

答案 0 :(得分:1)

叹息这是memcached。我把它弄好了(memcached -d),现在我的所有资产都出现了。我不知道为什么,所以我喜欢一些解释。否则,它正在运作。

答案 1 :(得分:0)

需要将一堆设置添加到开发和应用程序配置文件中,以使管道正常工作。

查看pipeline guide的最后一部分了解详情。

完成后我建议您将清单名称更改为application.css和application.js,因为这些是默认名称,从这些开始,您将遇到更少的问题。编辑你的问题,如果它仍然无效,我会在那之后看看我是否可以提供帮助。