我必须在本地预编译资源,以便我的一个JS插件正常工作。
每当我对任何资产和预编译进行更改时,我都会在公共/资产中获得一个新版本,旧版本也在那里。当我在生产模式下本地运行时,我将获得一个包含新资产的页面。
当我部署到EB时,页面始终包含指向旧资产的链接。
当然,application.html.erb使用动态css链接标记:<%= stylesheet_link_tag "application", media: "all" %>
production.rb包含:
config.action_controller.perform_caching = true
config.assets.compile = true
我认为这必须与Nginx或html文件中的EC2中的某种缓存有关,因为puma在本地运行。
我试过了:
rake tmp:clear
。唯一有效的方法是rake assets:clobber
,创建新的EB环境,并部署几次。有时候,即使这样也行不通。
请帮忙!
答案 0 :(得分:0)
我在登台或生产服务器上缓存资产时遇到了类似的问题。当我检查资产文件的Last-Modified
属性时,例如curl -I http://url-to-the-asset-file
服务器返回旧(缓存)文件。
解决问题的方法是更新production.rb文件中的资产版本。它将强制资产使用新的MD5哈希指纹重新编译。
# config/environments/production.rb
# Version of your assets, change this if you want to expire all your assets.
config.assets.version = '1.1'
希望这对您有所帮助或至少给予一些指导。
答案 1 :(得分:0)
经过无数个小时未能解决这个问题之后,我注意到Elastic Beanstalk配置设置中的一个变量,我从默认值改变了。 RAILS_SKIP_ASSET_COMPILATION - 我将其设置为true,因为我自己试图管理资产编译。将此重新设置为false可修复我的问题,并显着增加了部署时间。我的第三方javascripts和宝石也都正常工作。
我仍然认为这是一种解决方法,因为我应该能够手动预编译。但是,这对我来说已经足够了。