Ruby on rails 在生产环境中使用预编译资产时引发RoutingError

Ruby on rails 在生产环境中使用预编译资产时引发RoutingError,ruby-on-rails,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3.1,在预编译资产后,尝试在生产模式下使用资产管道测试部署一个简单的Rails 3.1应用程序。现在使用JRuby和WEBrick 1.3.1;计划是下一步在JBoss上部署 在开发环境中,一切都可以正常运行,但在生产环境中,当客户端请求任何预编译的资产时,它会引发RoutingError Rails服务器日志如下所示: 开始获取“/assets/application-a04f15ca8cb6078896dbdc22266757d9.css” 2012-02-06 18:19:04-0500时的12

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

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

Rails服务器日志如下所示:

开始获取“/assets/application-a04f15ca8cb6078896dbdc22266757d9.css” 2012-02-06 18:19:04-0500时的127.0.0.1

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

预编译的资产位于applications public/assets目录中

我应该期望WEBrick能够处理/public/assets吗?或者我只能在部署到Apache或类似的平台上时测试它吗

任何帮助都将不胜感激。

答案在


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

在您的生产环境中有哪些资产设置?有很多需要配置:在production.rb中:config.assets.compress=true;config.assets.compile=false;config.assets.digest=true;这与性能无关,更重要的是您需要“预热”应用程序,否则第一个点击应用程序的用户将触发编译步骤,这可能需要几秒钟/分钟,具体取决于您拥有的资产量。在任何一种情况下,我都会预编译用于生产的资产。我对性能的猜测是,在从public部署静态资产时,跳过整个Rails中间件堆栈会更快,因此这可能是def将其留给Apache的原因奥尔特。