Rails自定义布局 - 生产中的routingerror

时间:2013-10-25 13:23:10

标签: javascript css ruby-on-rails ruby-on-rails-4 asset-pipeline

我的网站的管理部分使用“管理员”布局。

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"):

这在开发中非常有效,并且前端资产在生产中正常加载,问题是什么?

1 个答案:

答案 0 :(得分:2)

原因是你的rails服务器(webrick,thin,...)为你的资产提供了未编译的资源,它在几个地方(例如app/assetsvendor/assets)查找它。在生产中,rails假定生产Web服务器处理资产服务,这些服务由public/提供。

由于在运行时编译 - 或者根本没有编译它们 - 减慢了页面服务的速度,它们被编译成引用你的样式的已知清单文件的名称(即{{1}默认情况下),您可以通过调用application.{css/js}来完成。

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