0

我的网站有一个使用“管理”布局的管理部分。

class Admin::BaseController < ActionController::Base
  layout "admin"

在布局/admin.html.slim

 = stylesheet_link_tag "admin", :media => "all"
 = javascript_include_tag "admin"

我收到 admin.js 和 admin.css 错误

Started GET "/stylesheets/admin.css" for x.x.x.x at 2013-10-25 13:18:16 +0000
F, [2013-10-25T13:18:16.505425 #31550] FATAL -- : 
ActionController::RoutingError (No route matches [GET] "/stylesheets/admin.css"):

这在开发中完美运行,并且前端资产在生产中正常加载,问题可能是什么?

4

1 回答 1

2

原因是您的 Rails 服务器(webrick、thin、...)为您的资产提供未编译的服务,它会在多个地方(如app/assetsvendor/assets)查找它。在生产环境中,rails 假定生产网络服务器处理资产服务,这些服务来自public/.

由于在运行时编译(或根本未编译交付它们)会减慢页面服务速度,因此它们会被编译为其已知清单文件的名称,这些清单文件引用您的样式(application.{css/js}默认情况下),您可以通过调用rake assets:precompile.

添加config.assets.precompile += %w( admin.css )config/application.rbconfig/environments/production.rb添加您的admin.css清单,以便 Rails 知道它还必须编译该清单。然后运行rake assets:precompile(如果你已经把它放到后面,你可能需要添加RAILS_ENV=production)。

于 2013-10-28T08:04:54.797 回答