如何避免在开发模式下提供预编译资源?

不想在开发模式下连接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.jsbar.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