2011-10-03 214 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

相關問題