我正在使用rails 4.1.8
在production.rb文件中我有以下内容:
config.eager_load = false
config.cache_classes = false
config.consider_all_requests_local = true
config.action_controller.perform_caching = true
config.serve_static_assets = true
config.assets.js_compressor = :uglifier
config.assets.compile = false
config.assets.digest = false
config.assets.debug = true
现在运行RAILS_ENV=production rake assets:precompile
它预先编译所有资产,并将它们与文件名application-ca4ad5e0582927b0a78c2b6feef3309b.js
一起存储在public / assets文件夹中
在我的本地生产环境中运行应用程序后,它会抛出错误
ActionController::RoutingError (No route matches [GET] "/assets/application.js"):
我尝试更改config.serve_static_assets和其他的值..但仍面临同样的问题。
预编译文件的名称中使用摘要值保存,例如: application-ca4ad5e0582927b0a78c2b6feef3309b.js
但作为application.js
访问,这会导致主要问题。
这里有什么建议? 谢谢..
请参阅此处的讨论 - 在推送到heroku之后,我的大多数资产突然返回404这是我们面临的确切问题。
添加12因子gem: github.com/heroku/rails_12factor修复了这个问题。 (如果你在Heroku上运行Rails 4+,现在需要这个gem)。 我尝试在您正在使用的同一个仓库中添加gem'trail_12factor',这样可以加载所有资产。
基本上这个rails_12factor
宝石是rails_12factor
宝石的组合即。 rails_serve_static_assets
和rails_stdout_logging
。 Gem rails_serve_static_assets
只是将此配置设置为true。 这通常在您的config / environments / production.rb中
config.serve_static_assets = true
所以一般来说,如果我们正在开发一个Rails4
应用程序并且我们部署在我们自己的服务器上(比如专用服务器而不是heroku),那么将此标志config.serve_static_assets
设置为true就足够了,我们不需要添加rails_12因子或任何其他宝石。 以下是rails_serve_static_assets
gem使用的rails_12factor
gem的代码。
module RailsServeStaticAssets
class Railtie < Rails::Railtie
config.before_initialize do
if Rails.version >= "4.2.0"
::Rails.configuration.serve_static_files = true
else
::Rails.configuration.serve_static_assets = true
end
::Rails.configuration.action_dispatch.x_sendfile_header = nil
end
end
end
Rails 4中的资产管道不会在没有摘要的情况下编译资产。 默认是仅编译已消化的资产。 此选项不执行任何操作
config.assets.digest = false # Will not compile undigested assets
您需要使用rails helper来生成application.js
的消化路径
<%= stylesheet_link_tag "application" %>
如果这不是一个选项,您可以使用各种策略之一来生成非消化资产:
sprocket-rails项目中的这个github问题有很多讨论和解决方法。
我认为你需要在production.rb中启用资产管道的回退:
config.assets.compile =true
这意味着您正在进行动态编译(本地供您测试),但在部署到生产时删除此行或将其设置为false。
@Swati,首先清理断言管道 -
rake资产:清理然后运行
RAILS_ENV =生产佣金资产:预编译