Javascript 在Rails生产中禁用资产小型化
为了在heroku生产环境中调试javascript,我需要禁用资产压缩(或者至少禁用javascript压缩)。我尝试了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目录(后两个目
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解决方案,您还需要执行以下操作:
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'