我正在构建一个我作为宝石捆绑的引擎(gmaps4rails)。我在我的rails应用程序的/ public中复制了我的引擎的/ 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"):
我做了一些事情:
在我的应用的production.rb中,我设置了:
config.serve_static_assets = true
这解决了问题,但不够优雅,我想将其保持为假并在引擎中添加配置:)
我没有成功地遵循建议 here 。
答案 0 :(得分:7)
出于性能原因,在生产模式下禁用静态资产服务。您的网络服务器应配置为提供这些资产。
如果您使用nginx作为网络服务器,请查看此discussion。
答案 1 :(得分:5)
在Rails 3.x中尝试在config / environments / production.rb
中设置它config.serve_static_assets = true
默认情况下,Rails假设您使用的是资产服务器(lightttp,nginx或Apache)
答案 2 :(得分: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
答案 3 :(得分:2)
您是否尝试将此添加到您的Rails :: Engine类:
initializer "static assets" do |app|
app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end
这将在您的Gem / public目录中与应用程序在运行时合并。
答案 4 :(得分: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
我想有一种更优雅的方式,但我今天的努力并没有产生任何实质性的东西。
答案 5 :(得分:0)
我不太了解宝石的包装/制作方式。但是为什么你不能将你的gems公共文件夹中的images / js / css东西复制到apps公共文件夹中?我只是这样做,它对我有用。这不是完成的事吗?