Rails资产管道在生产环境中不起作用?

问题描述 投票:7回答:2

我最近将应用程序从Rails 3.0升级到3.1。 我已经按照我可以找到的任何指令启用资产管道,但在生产环境中它总是失败:

<%= 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/imagesapp/assets/javascriptsapp/assets/stylesheets等。

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

app/assets/javascripts/application.js确实编译成类似public/assets/application-6ec417a53cb2bdb949966a153a61e7b1.js它们最终出现在public目录中。

ruby-on-rails-3.1 asset-pipeline
2个回答
12
投票

链轮没有加载。

为了删除以前版本的rails中的活动记录(这个问题在Rails 3(beta)中删除了ActiveRecord ), require 'rails/all'被替换为

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

这里缺少的是sprockets/railtie


3
投票

请参阅升级到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>

尝试通过访问http://example.com//assets/application-6ec417a53cb2bdb949966a153a61e7b1.js手动加载文件

该文件应该加载,如果没有尝试检查权限和更多日志。

© www.soinside.com 2019 - 2024. All rights reserved.