在Rails生产中禁用资产缩减

为了在我的heroku生产环境中debuggingjavascript,我需要禁用资产压缩(或者至less压缩javascript)。 我试着config.assets.compress = falseconfig.assets.debug = true ,压缩的资源仍然被使用。 然后,我删除了压缩资产,此时根本没有任何资产被提供。 我加了config.assets.enabled = false ,这没有帮助。 我尝试将未压缩的资源复制到各种目录中,包括应用程序根目录,公共资源和公共资源(后两个使用“images”,“javascripts”和“stylesheets”文件夹,并将资源直接放入文件夹中三个子文件夹)我最终能够通过改变HTML来直接引用所有的JavaScript文件,但CSS和图像仍然无法正常工作。

我会认为我原来的config.assets.compress = false应该已经工作。 任何想法我做错了什么?

阅读文档后,我想出了这个解决方法:

创build一个模块,它不会在这里压缩js / css: lib/modules/no_compression.rb

 class NoCompression def compress(string) # do nothing string end end 

configuration您的资产(不)与您的无操作压缩机压缩

 config.assets.compress = true config.assets.js_compressor = NoCompression.new config.assets.css_compressor = NoCompression.new 

在Rails 4中,只是注释掉这行

 # config.assets.js_compressor = :uglifier 

config/environments/production.rb为我工作。 看起来像默认是不压缩。

我也需要debugging我的js,所以我尝试了ncherro的解决scheme。 问题是,它仍然会抛出

耙中止! 未初始化的常量NoCompression

所以我只把NoCompression类放在production.rb文件中

  # Compress JavaScripts and CSS class NoCompression def compress(string) # do nothing string end end config.assets.compress = true config.assets.js_compressor = NoCompression.new config.assets.css_compressor = NoCompression.new 

另外值得注意的是…除了ncherro解决scheme,您将需要执行以下操作:

  1. 确保把你的新模块放在默认加载的地方。 在我的情况下是lib / extras。
  2. 运行rake assets:clean以清理现有资产。
  3. 运行rake assets:precompile使用新压缩rake assets:precompile来编译您的资产。
  4. 重新启动你的应用程序…我使用touch tmp/restart.txt

快乐debugging;)

注释掉uglifier并添加config.assets.debug = true 。 这对我有效。

  • 压缩JavaScript和CSS:

    config.assets.js_compressor = :uglifier

  • debugging模式会禁用资源的连接和预处理。 但是,这个选项可能会导致大量的复杂资产在视图渲染上出现明显的延迟:

    config.assets.debug = true

在Heroku上使用Rails 4,你需要做两件事情。 首先如@geekQ提到的那样,注释掉config/environments/production.rb的js_compressor行

 # config.assets.js_compressor = :uglifier 

其次,您需要考虑Heroku针对Rails 4的资产pipe道caching。任何与caching中的版本相同的MD5文件都不会被重新编译。 以前的(可能是压缩的)版本将被提供。 你编辑的任何文件都将有一个新的MD5并被重新编译。

您还可以使用Heroku Repo插件清除整个资产caching到Heroku工具栏。 安装,然后使用该命令

 heroku repo:purge_cache 

清除caching后部署新版本,并重新编译您的所有资产。

我必须更新config/initializers/assets.rb中的config/initializers/assets.rb以使production.rb更改生效。

看起来这可能是Rails中的一个bug。 从即将推出的rails 3.2.9的更新日志,这是你所遇到的?

尊重asset_path的config.digest = false

以前,asset_path内部仅考虑:摘要选项,但忽略全局configuration设置。 这意味着config.digest = false不能与config.compile = false一起使用,这会纠正行为。

http://weblog.rubyonrails.org/2012/10/29/ann-rails-3-2-9-rc1-has-been-released/

你认为这可能是相关的吗?

在environment / production.rb **中查找并注释掉这些行

 config.assets.js_compressor = <:compiler> config.assets.css_compressor = <:compiler> 

**