7

我正在构建一个捆绑为 gem (gmaps4rails) 的引擎。我将 /public 的引擎复制到了我的 rails 应用程序的 /public 中。

在开发中一切正常,但在生产中无法正常工作:似乎找不到静态资产(我的引擎和我的主应用程序的)。

日志告诉以下内容(只是摘要):

Started GET "/javascripts/application.js?1286294679" for 127.0.0.1 at Wed Nov 24 00:22:20 +0100 2010

ActionController::RoutingError (No route matches "/javascripts/application.js"):


Rendered /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/gems/1.8/gems/actionpack-3.0.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.1ms)


Started GET "/stylesheets/gmaps4rails.css?1290554221" for 127.0.0.1 at Wed Nov 24 00:22:20 +0100 2010

ActionController::RoutingError (No route matches "/stylesheets/gmaps4rails.css"):

我做了几件事:

  1. 在我的应用程序 production.rb 中,我设置:

    config.serve_static_assets = true

    这解决了问题但不够优雅,我想将其保持为 false 并在引擎中添加配置:)

  2. 我按照这里的建议没有成功。

4

6 回答 6

7

出于性能原因,静态资产服务在生产模式下被禁用。您的网络服务器应配置为提供这些资产。

如果您使用 nginx 作为网络服务器,请查看此讨论。

于 2010-11-25T21:50:14.213 回答
5

在 Rails 3.x 中尝试在 config/environments/production.rb 中设置

config.serve_static_assets = true

默认情况下,Rails 假定您使用的是资产服务器(lightttp、nginx 或 Apache)

于 2011-01-11T19:46:56.407 回答
4

在您的引擎中,替换:

initializer "static assets" do |app|
  app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end

和:

initializer "static assets" do |app|
      app.middleware.insert_before(::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public")
end
于 2011-03-27T11:16:28.133 回答
2

您是否尝试将其添加到 Rails::Engine 类中:

initializer "static assets" do |app|
  app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end

这将在运行时与应用程序合并到您的 Gem 的 /public 目录中。

于 2010-11-24T16:50:54.010 回答
1

我在安装 Rails 3.1 引擎时遇到了类似的问题。我在舞台和制作中收到空白资产。

我在http://jonswope.com/2010/07/25/rails-3-engines-plugins-and-static-assets/comment-page-1/#comment-87找到了一个解决方案,并对其进行了调整以适应 Rails 3.1资产位置:

initializer "static assets" do |app|
  app.middleware.insert_before ::Rack::Lock, ::ActionDispatch::Static, "#{root}/app/assets"
end

我想有一种更优雅的方式,但我今天的努力并没有产生任何实质性的结果。

于 2012-02-01T01:36:29.107 回答
0

我不太了解这种方式,宝石是打包/制作的。但是为什么不能将 gems 公用文件夹的 images/js/css 内容复制到应用程序公用文件夹中呢?我只是这样做了,它对我有用。这不是已经完成的事情吗?

于 2011-02-22T23:55:58.357 回答