【问题标题】:RoutingError raised when using precompiled assets in production environment在生产环境中使用预编译资产时引发 RoutingError
【发布时间】:2012-02-28 10:52:18
【问题描述】:

在预编译资产后,尝试使用资产管道在生产模式下测试部署一个简单的 Rails 3.1 应用。现在使用 JRuby 和 WEBrick 1.3.1;计划下一步部署在 JBoss 上。

在开发环境中一切正常,但在生产环境中,当客户端请求任何预编译资产时,它会引发 RoutingError。

Rails 服务器日志如下所示:

开始 GET "/assets/application-a04f15ca8cb6078896dbdc22266757d9.css" 对于 127.0.0.1 在 2012-02-06 18:19:04 -0500

ActionController::RoutingError(没有路由匹配 [GET] "/assets/application-a04f15ca8cb6078896dbdc22266757d9.css)

预编译的资产位于应用程序 public/assets 目录中。

我应该期望 WEBrick 能够处理 /public/assets 吗?还是我只能在部署在 Apache 等上时进行测试?

任何帮助将不胜感激。

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3.1


【解决方案1】:

答案在No route matches [GET] /assets

这是有道理的。默认情况下,生产模式下的 Rails 不提供静态资产,将其留给部署服务器。您可以通过将 config.serve_static_assets 设置为 true 来配置 rails 以提供静态资产(尽管将其设置为 false 可能会获得更好的性能)

【讨论】:

  • 这与性能无关,更多的是您需要“预热”您的应用程序,否则第一个用户点击应用程序将触发编译步骤,这可能需要几秒钟/几分钟,具体取决于您拥有的资产数量。
  • 无论哪种情况,我都会为生产预编译资产。我对性能的猜测是,从公共部署静态资产时跳过整个 Rails 中间件堆栈会更快,所以这可能是默认情况下留给 Apache 的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多