在Rails生产中禁用资产缩减
为了在我的heroku生产环境中debuggingjavascript,我需要禁用资产压缩(或者至less压缩javascript)。 我试着config.assets.compress = false
和config.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,您将需要执行以下操作:
- 确保把你的新模块放在默认加载的地方。 在我的情况下是lib / extras。
- 运行
rake assets:clean
以清理现有资产。 - 运行
rake assets:precompile
使用新压缩rake assets:precompile
来编译您的资产。 - 重新启动你的应用程序…我使用
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>
**