我的 Rails 4 应用程序有new.html.erb
其中引用了form.html.erb
:
# app/assets/templates/jobs/new.html.erb
...
<ng-include src="'<%= asset_path("jobs/form.html") %>'"></ng-include>
...
# app/assets/templates/jobs/form.html.erb
my form is here
(ng-include is AngularJS指示)
问题是,当form.html.erb
更改后,生产环境仍然加载旧的form.html.erb
。发生这种情况可能是因为new.html.erb
没有改变,因此具有相同的旧指纹,它指向form.html.erb
与旧指纹。
Rails 处理这个问题的方法是什么?
通常,资产仅在生产/部署环境中“预编译”。这意味着默认情况下不应有文件夹public/assets/
当您开发时(Sprockets 在开发模式下为您动态编译资产)。
如果你不小心跑了rails assets:precompile
在开发过程中,您将在这里有一个额外的文件夹(public/assets/
)它不会签入您的存储库。
但如果它确实存在,那么它的存在会覆盖 Sprocket 的开发模式设置,在每次页面加载时重新编译,迫使您的浏览器加载已经编译的(和stale) 资产来自public/assets/
...如果您确实有一个文件夹public/assets/
,请务必将其完全删除rm -rf public/assets/
(讽刺的是,跑步rails assets:precompile
or rake assets:precompile
,虽然它确实强制进行一次性重新编译,并且似乎为您提供了最新的 JS 编译,但在开发中执行此操作通常是causes首先是链轮卡住的问题)
接下来,使用以下命令强制 Sprockets 破坏指纹缓存:
rails assets:clean
rails assets:clobber
touch tmp/restart.txt
你必须实际触摸这个空的tmp/restart.txt
文件——不仅仅是重新启动 Rails 开发环境,还要强制 Sprockets 破坏指纹缓存。
要进一步调试,请设置assets.debug = true
在您的环境文件中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)