【问题标题】:Rails custom layouts - routingerror in productionRails自定义布局 - 生产中的路由错误
【发布时间】:2013-10-25 13:23:09
【问题描述】:

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

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

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

【问题讨论】:

  • Rails 4 assets.precompile的可能重复
  • 添加 'config.assets.precompile += %w( admin.js admin.css )' 到 application.rb 解决了这个问题,虽然我不知道它为什么会发生..
  • 为你添加了解释。

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


【解决方案1】:

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

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

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

【讨论】:

  • 那是我的问题。用config.assets.precompile += 提示解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 2013-09-04
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
相关资源
最近更新 更多