在Rails生产中禁用资产缩减

时间:2012-03-12 20:59:07

标签: javascript ruby-on-rails compression asset-pipeline

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

我原本认为原来的config.assets.compress = false应该有效。我做错了什么想法?

9 个答案:

答案 0 :(得分:51)

在阅读the docs后,我想出了这个解决方法:

在这里创建一个不压缩js / css的模块:lib/modules/no_compression.rb

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

答案 1 :(得分:24)

在Rails 4下只需注释掉

# config.assets.js_compressor = :uglifier
config/environments/production.rb中的

为我工作。看起来默认是没有压缩器。

答案 2 :(得分:11)

我还需要调试我的js,所以我尝试了ncherro的解决方案。问题是它仍会抛出

  耙子流产了!   未初始化的常数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

答案 3 :(得分:6)

另外值得注意的是......除了ncherro解决方案,您还需要执行以下操作:

  1. 确保将新模块放在默认加载的位置。在我的案例中是lib / extras。
  2. 运行rake assets:clean以清理现有资产。
  3. 使用新压缩程序运行rake assets:precompile来编译资产。
  4. 重新启动您的应用...我使用touch tmp/restart.txt
  5. 快乐调试;)

答案 4 :(得分:6)

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

  • 压缩JavaScripts和CSS:

    config.assets.js_compressor = :uglifier

  • 调试模式禁用资产的连接和预处理。但是这个选项可能会导致大量复杂资产的视图渲染出现严重延迟:

    config.assets.debug = true

答案 5 :(得分:2)

在Heroku上使用Rails 4,你需要做两件事。首先,如@geekQ所述,注释掉config/environments/production.rb

中的js_compressor行
# config.assets.js_compressor = :uglifier

其次,您需要考虑Heroku's asset pipeline cache for Rails 4.任何与缓存中的版本具有相同MD5的文件都不会被重新编译。将提供先前(可能已压缩)的版本。您编辑的任何文件都将具有新的MD5并重新编译。

您还可以使用Heroku Repo plugin清除整个资产缓存到Heroku工具带。安装它,然后使用命令

heroku repo:purge_cache

清除缓存后部署新版本,您的所有资产都将重新编译。

答案 6 :(得分:1)

我必须更新Rails.application.config.assets.version中的config/initializers/assets.rb才能使production.rb更改生效。

答案 7 :(得分:1)

environments/production.rb中找到并注释掉这一行:

config.assets.js_compressor = ...
config.assets.css_compressor = ...

答案 8 :(得分:0)

看起来这可能是Rails中的一个错误。从即将推出的rails 3.2.9的更新日志中,您遇到了什么?

  

对于asset_path

,尊重config.digest = false      

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

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

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