Javascript 在Rails生产中禁用资产小型化

Javascript 在Rails生产中禁用资产小型化,javascript,ruby-on-rails,compression,asset-pipeline,Javascript,Ruby On Rails,Compression,Asset Pipeline,为了在heroku生产环境中调试javascript,我需要禁用资产压缩(或者至少禁用javascript压缩)。我尝试了config.assets.compress=false和config.assets.debug=true,压缩的资产仍然被使用。然后我删除了压缩的资产,在这一点上根本没有资产被渲染。我添加了config.assets.enabled=false,这没有帮助。我尝试将未压缩的资产复制到不同的目录中,包括应用程序根目录、public目录和public/assets目录(后两个目

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


我本以为我原来的
config.assets.compress=false
应该可以工作。你知道我做错了什么吗?

看起来这可能是Rails中的一个bug。从即将发布的Rails 3.2.9的变更日志中,你是不是遇到了这个问题

资产路径的尊重config.digest=false

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


你认为这可能有关系吗?

我在阅读了以下内容后提出了这个解决方法:

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

class NoCompression
  def compress(string)
    # do nothing
    string
  end
end
# config.assets.js_compressor = :uglifier
将资产配置为(不)使用“不做任何事情”压缩器进行压缩

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

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

  • 确保将新模块放在默认情况下加载的位置。在我的例子中是lib/extras
  • 运行
    rake assets:clean
    清理现有资产
  • 运行
    rakeassets:precompile
    以使用新的压缩器编译资产
  • 重新启动应用程序…我使用
    触摸tmp/restart.txt

  • 愉快的调试;)

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

    雷克流产了! 未初始化常量无压缩

    所以我只是把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
    

    在Rails 4下,只是注释了这条线

    # config.assets.js_compressor = :uglifier
    

    config/environments/production.rb中
    对我有效。看起来默认值是无压缩。

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

    • 压缩Java脚本和CSS:

      config.assets.js_compressor=:uglifier

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

      config.assets.debug=true


    • 使用Heroku上的Rails 4,您需要做两件事。首先,正如@geekQ所提到的,在
      config/environments/production.rb中注释掉js_压缩机行

      class NoCompression
        def compress(string)
          # do nothing
          string
        end
      end
      
      # config.assets.js_compressor = :uglifier
      

      第二,您需要考虑任何与MD5相同的文件,因为缓存中的版本将不会被重新编译。以前的(可能压缩的)版本将被服务。您编辑的任何文件将有一个新的MD5并被重新编译。 您还可以使用到Heroku工具带的清除整个资产缓存

      heroku repo:purge_cache
      

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

      我必须在
      config/initializers/assets.rb
      中更新
      Rails.application.config.assets.version
      ,以便
      production.rb
      更改生效。

      环境/production.rb
      中查找并注释掉这些行:

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

      您确实在修改
      config/environments/production.rb
      ?是否使用Rails标记帮助程序访问资产(javascript\u include\u标记'script.js')?你能把重点放在一个文件上,给我们举个例子说明它是如何实现的以及发生了什么吗?我不认为这两者是相关的,因为我认为变化与是否在资产名称中添加摘要有关,而我的问题更多地与javascript压缩有关。可能存在同样的问题使用config.asset.compression,我想他们还没有找到它。无论如何,谢谢你的提醒。非常聪明!我从来没有想到过。谢谢!在部署到暂存服务器时使用它真是太好了。在heroku上每次部署总共260秒,这样可以节省我100秒。这还会给资产文件名添加哈希吗?我必须调试服务器上的一些代码,但为了找到错误,我需要使用正确的哈希资产名称。@Ziggy很抱歉回复太晚,但链轮仍会附加一个摘要,该摘要是由未压缩文件的MD5哈希创建的(只要在您的environment.rb文件中
      config.assets.digest=true
      )移除
      config.assets.js_compressor=:uglifier
      就足以修复它移除
      config.assets.js_compressor=:uglifier
      就足以修复它您可以使用require语句将
      no_compression.rb
      包含在production.rb文件中
      require'modules/no_compression.rb'