如何避免在开发模式下提供预编译资源?
我不想在开发模式下连接JavaScript文件,而是将它们作为单独的文件提供。 所以我configuration了:
development.rb:
config.assets.compress = false config.assets.debug = true config.assets.compile = true
在我的/ app / assets / javascript目录中有:
- reviews.js
- 评论/
- foo.js
- bar.js
reviews.js:
//= require jquery //= require jquery_ujs //= require_tree ./reviews
我在我的布局中使用<%= javascript_include_tag "reviews" %>
包含JavaScript。 生成的页面正确地引用这三个脚本, reviews.js
基本上是空的。 到现在为止还挺好。
现在,当我使用rake assets:precompile
预编译我的资产进行生产时rake assets:precompile
三个JavaScript文件被连接到reviews.js
。 这对于生产来说都是很好的,但是现在, 在开发模式下 , 除了两个单独的文件之外还提供了concatenated reviews.js
。
当然,这会导致各种讨厌的bug在开发,因为现在, foo.js
和bar.js
的内容被提供两次,其中一个在bar.js
中的潜在旧版本。
我如何确保Rails在开发模式下不使用预编译资源?
这听起来像是在本地进行预编译。 由于文件存在于预期的位置,所以它们由开发服务器提供服务,并且请求不会转到链轮。
停止这个唯一的方法是删除编译的文件。
通常你不需要在本地编译。 预计在几乎所有情况下,预编译任务将在部署应用程序期间运行。 资产pipe道指南页面上有一个Capistrano配方。
如果您确实需要将这些文件本地提交到您的存储库,则可以使用分支来避免该问题。 保留生产代码的主分支,并为dev创build第二个分支。 只在主人上编译和提交资产。 当你切换到开发,他们将会消失。 根据需要将开发人员合并到主人。
编辑:确保您强制您的浏览器更新(控制+ F5),或者您可能会发现从浏览器caching中使用的旧资产!
在config/environments/development.rb
设置:
config.assets.prefix = "/assets_dev"
所以在开发模式下,Rails将会在那里看到(但是它不会find任何东西,因为你不会在开发中编译资产(这实际上是你正在做的 – 不是编译资产)。
预编译生产时 ,使用
RAILS_ENV=production rake assets:precompile
所以它编译成默认资产文件夹public/assets
。
在config/environments/development.rb
设置:
config.serve_static_assets = false
没有来自/public
文件将被提供
我试过这个,它的工作。 rake assets:precompile RAILS_ENV=production
我发现当您运行rake assets:precompile
时,新版本的资产pipe道会执行此操作rake assets:precompile
执行rake assets:precompile:all