我更喜欢 not 在开发模式下连接JavaScript文件,但是将它们作为单独的文件提供。所以我配置了:
development.rb:
config.assets.compress = false
config.assets.debug = true
config.assets.compile = true
在我的/ app / assets / javascript目录中,我有:
reviews.js:
//= require jquery
//= require jquery_ujs
//= require_tree ./reviews
我在我的布局中使用<%= javascript_include_tag "reviews" %>
包含了JavaScript。生成的页面正确引用了三个脚本,reviews.js
基本上是空的。到目前为止一切都很好。
现在,当我使用rake assets:precompile
预编译我的资产以进行生产时,三个JavaScript文件会连接到reviews.js
。这对于制作来说非常好,但现在,在开发模式中,连接的reviews.js
另外 提供给两个单独的文件。
当然,这会在开发时导致各种令人讨厌的错误,因为现在,foo.js
和bar.js
的内容会提供两次,其中一个是{{1}中可能较旧的版本}。
如何确保Rails在开发模式下不使用预编译资产?
答案 0 :(得分:80)
在config/environments/development.rb
集合中:
config.assets.prefix = "/assets_dev"
所以在开发模式下Rails会看到那里(但是它不会找到任何东西,因为你不会在开发中编译资产(这确实是你想要做的 - 不编译资产))。
预编译生产时,请使用
RAILS_ENV=production rake assets:precompile
因此它会编译到默认资源文件夹public/assets
。
答案 1 :(得分:53)
听起来好像是在本地进行预编译。因为文件存在于预期的位置,所以它们由开发服务器提供服务,并且请求不会转到Sprockets。
停止此操作的唯一方法是删除已编译的文件。
通常您不需要在本地编译。预计在几乎所有情况下,预编译任务都将在部署应用程序期间运行。在资产管道指南页面上有一个Capistrano配方。
如果您确实需要将这些文件本地提交到您的仓库,您可以使用分支来避免此问题。保留主分支以获取生产代码,并为dev创建第二个分支。仅在master上编译和提交资产。当你切换到dev时,它们就会消失。根据需要将dev合并为master。
编辑:确保您强制浏览器更新(控制+ F5),或者您可能会发现浏览器缓存中使用的旧资产!
答案 2 :(得分:17)
在config/environments/development.rb
集合中:
config.serve_static_assets = false
并且不会提供/public
中的任何文件
答案 3 :(得分:1)
我尝试了这个并且它有效。 rake assets:precompile RAILS_ENV=production
我发现,当您运行rake assets:precompile
rake assets:precompile:all