2011-10-03 150 views
7

我最近将一个应用程序从Rails 3.0升级到了3.1。我跟了我能找到使资产管道的任何指示,但是当生产环境总是失败:Rails资产管道在生产环境中不起作用?

<%= javascript_include_tag "application" %> 

给我

<script src="/javascripts/application.js" type="text/javascript"></script> 

一个缺少消化和我得到的以下错误:

cache: [GET /javascripts/application.js] miss 
Started GET "/javascripts/application.js" for 127.0.0.1 at 2011-10-03 23:31:36 +0100 
ActionController::RoutingError (No route matches [GET] "/javascripts/application.js"): 

我已经试过这些设置的变化application.rb中:

require File.expand_path('../boot', __FILE__) 

#require 'rails/all' 
require "action_controller/railtie" 
require "action_mailer/railtie" 
require "active_resource/railtie" 
require "rails/test_unit/railtie" 

if defined?(Bundler) 
    # If you precompile assets before deploying to production, use this line 
    Bundler.require *Rails.groups(:assets => %w(development test)) 
    # If you want your assets lazily compiled in production, use this line 
    # Bundler.require(:default, :assets, Rails.env) 
end 


module Blog 
    class Application < Rails::Application 
    config.autoload_paths += %W(#{config.root}/lib) 
    config.encoding = "utf-8" 
    config.filter_parameters += [:password] 
    config.assets.enabled = true 
    config.assets.version = '1.0' 
    end 
end 

和全production.rb(减去一些评论)

Blog::Application.configure do 
    config.cache_classes = true 
    config.consider_all_requests_local  = false 
    config.action_controller.perform_caching = true 
    config.serve_static_assets = false 
    config.assets.compress = true 
    config.assets.compile = false 
    config.assets.digest = true 
    config.i18n.fallbacks = true 
    config.active_support.deprecation = :notify 
end 

我已经跑了rake assets:precompile任务。

我是否缺少明显的步骤?

编辑:一些额外的细节:

我的资产是app/assets文件夹中。 app/assets/images,app/assets/javascripts,app/assets/stylesheets

我看到我的文件生成在我的public/assets目录中的名称和摘要。

app/assets/javascripts/application.js的确编译成类似于public/assets/application-6ec417a53cb2bdb949966a153a61e7b1.js的东西它们最终在public目录中。

回答

12

链轮没有被加载。

在努力消除在以前版本的轨道的活动记录(一拉这个问题Remove ActiveRecord in Rails 3 (beta))的require 'rails/all'

require "action_controller/railtie" 
require "action_mailer/railtie" 
require "active_resource/railtie" 
require "rails/test_unit/railtie" 

更换少了什么这里是sprockets/railtie

+0

我使用RSpec,因此有一个类似的设置与test_unit注释掉。我不知道链轮有自己的railtie。非常感谢你做的这些。 –

+0

真棒抓B) – dexter

3

Upgrading to Rails 3.1 Railscast

确保你的资产是app/assets文件夹中。 app/assets/imagesapp/assets/javascriptsapp/assets/stylesheets

执行rake assets:precompile

你应该看到在你的app/public/assets目录与名称和摘要生成的文件,如果启用。

app/assets/javascripts/application.js将编译为/assets/application-6ec417a53cb2bdb949966a153a61e7b1.js

如果资产被命名为类似于上面摘要,Production.rb应具有以下配置:

# Generate digests for assets URLs 
config.assets.digest = true 

如果你看一下网页源,你应该看到类似于以下内容:

<script src="/assets/application-6ec417a53cb2bdb949966a153a61e7b1.js" type="text/javascript"></script> 

尝试通过转到手动加载文件

如果不尝试检查权限并进一步记录,应加载该文件。

+0

谢谢,我只好眼睁睁地看着在进行我的更改时铸成的钢轨。我已更新我的答案以解决您的建议。 – tpower

+0

你可以发布你的'application.rb'和'production.rb'吗? – Joey

+0

我已经在问题中添加了完整的'application.rb'和'production.rb'。完整的回购:https://github.com/trevorpower/trevorpower-com – tpower