gpt4 book ai didi

ruby-on-rails - Ruby on Rails 4.2 Assets 管道不会缩小/压缩 application-fingerprinted.js JS 文件

转载 作者:行者123 更新时间:2023-12-03 00:30:14 26 4
gpt4 key购买 nike

我有一个 ruby​​ on Rails 4.2 应用程序,并且我的 Assets 管道在长达 2 天的时间里都面临着“令人毛骨悚然”的问题。我的产品托管在 Heroku 上,我在这里直接提到这一点,因为我认为这可能是相关的,我有他们 gem 'rails_12factor', group::production

我阅读并尝试了许多关于 Rails Assets 没有编译的(太多)SO 问题的建议,但没有一个工作,因为我将进一步描述。

观察到的导致我提出这个问题的问题是我的 我的 javascript application.js 文件在生产中没有被缩小 .

我怎么知道?空格仍然在这里,注释没有被删除,applciation.js,与我的 application.css 相反,只是所有 js 文件的串联,但没有压缩/缩小已经完成。

关于 SO 的大多数问题都涉及图像、css 或 js 均未缩小/预编译但 的问题。我的情况很特殊,因为图像、css 被预编译/缩小,但只有 js 是一个问题并且没有被缩小 .

我的js有问题吗? (请参阅下面的一些实验,我试图找出错误的原因)似乎不是

我在下面的设置将向您展示我如何处理 Assets (在我初学者理解的范围内):我使用守卫不断监视任何更改并预编译内容并将生成的/生成的应用程序-tr56d7.css(指纹)和应用程序- 45dsugdsy67.js((指纹)在 public/assets 中,然后当我在 git 上部署时,它会推送所有更改,包括预编译/缩小的文件,然后当我推送到 Heroku 时,我的生产 Assets 设置告诉 Rails 部署我已经预编译的 Assets 。我是一个初学者,很难理解所有众多的开发/生产环境 Assets 设置,但我认为这就是代码中定义的内容,您会在后面找到。

我知道所有这些过程都在起作用,因为每次我更改文件时,我都能找到一个新的 application-tr56d7.css 和一个新的 application-45dsugdsy67.js(当然是示例)(以及一个新的 css.gz 和 .js.z这必须是二进制的东西)

例如,每次我更改一个 js 文件时,守卫都会执行他的工作,我可以阅读如下内容:

I, [2018-02-09T09:53:41.140165 #130534]  INFO -- : Writing /home/mathieu/rails_projects/my_app/public/assets/application-af0ab4a348e4f5545c844cfac02a0670.js

然后可以在 public/assets 文件夹中找到新生成的 application.css 和 application.js 文件:例如
/public/assets/application-1021e7d2ea120fe40c67ec288f1c6525.js
/public/assets/application-1021e7d2ea120fe40c67ec288f1c6525.js.gz (binary: just a list of numbers...)
/public/assets/application-753e1d0958f76ae233a460ad47606790.css
/public/assets/application-753e1d0958f76ae233a460ad47606790.css.gz (binary: just a list of numbers...)

因此,当我观察到在生产中 css 是 application-753e1d0958f76ae233a460ad47606790.css 缩小但不是 application-1021e7d2ea120fe40c67ec288f1c6525.js js 时,我去看了
公共(public)/ Assets 在这里我也注意到了同样的事情:
  • 由guard生成的css文件例如/public/assets/application-753e1d0958f76ae233a460ad47606790.css css被缩小
  • 但是 gyard 生成的 js 文件没有被缩小

  • 所以我认为,但我不确定, 这不是 Heorku 特有的问题 ,只是在将其推送到 Heroku 之前,我托管在 public/assets 上的 js 文件应该但没有缩小。

    我试图调试这个(破坏悬念:全部失败):
  • 试图在 assets.rb 中明确说编译 application.js 不起作用 => 结果:js 仍然没有在本地缩小,也没有在 heroku 的生产网站上

    # 建议在config/application.rb中明确 Assets list
    config.assets.precompile = ['application.js']
  • 尝试通过 rake 清理所有旧东西:assets clobber => 结果:js 仍未在本地缩小,也未在 heroku 上的生产网站上缩小
  • 尝试通过更改版本来清理旧东西
    assets.rb:已更改 => 结果:js 仍未在本地缩小,也未在 heroku 上的生产网站上缩小
     config.assets.version = '1.0'

    进入
     config.assets.version = '1.1'
  • 尝试更改所有各种开发和生产 Assets 设置 => 结果:js 仍未在本地缩小,也未在 heroku 上的生产网站上缩小

  • config.serve_static_assets = true 并尝试过 false
    还为这两个文件尝试了这么多不同的设置,但没有一个奏效。
  • 尝试在本地和 prod 中编译 => 结果:js 仍然没有在本地缩小,也没有在 heroku 的生产网站上

    rake Assets :预编译 RAILS_ENV=production --trace

  • 也试过本地:
    rake assets:precompile
  • 2 最奇怪的尝试:
    在我尝试通过修改所有失败的 Assets 管道设置来完成这项工作之后,我想 也许某处存在一个棘手的 javascript 错误 默默地打破由守卫所做的缩小/压缩(在页面加载方面也是沉默的,因为当我加载我的页面时,chrome 开发工具上没有出现错误,但谁知道...阅读一些 SO 问题上的一些奇怪的评论影响 Assets 管道)',所以
    我决定在 assets/javascripts/中评论我所有的 js 文件!什么都没有了:甚至删除了最终在管道中但由 gem 注入(inject)的 js(因此在我的文件夹 app/assets/javascripts 中不可见),例如 jquery gem:并创建 2 个非常基本的 js 文件
    那将是唯一剩余的文件......
    仍然很好:=> 结果:js 仍然没有在本地缩小,也没有在 heroku 的生产网站上缩小

  • 再次进行了与上面相同的测试,但这里更进一步:我清空了(删除了所有内容)我的 Assets /javascripts 中的所有 js 文件,并从 application.js 中删除了所有 gems,只留下 require 目录,然后创建了 2非常简单的 js 文件来检查它现在是否被缩小了......
    结果仍然相同:js 仍然没有在本地缩小,也没有在 heroku 上的生产网站上缩小
  • 一种有效的测试

  • 做 rake assets:clobber 然后推送 (git add, git commit, git push, git push heroku pasteer) 确实编译了 js 但不幸的是它产生了其他问题:它向生产发送了一个旧版本的 js(我知道,因为我在 js 中放置一条警告消息,它不是最新的!)。它揭示了关于 rake assets:clobber 类型的调试的错误的什么?

    编辑
    我让它工作了,但过程相当苛刻:
    借用有人说不改css或js就没有编译(见 https://stackoverflow.com/a/7988689/1467802),我调整了之前的流程:(修改js文件中的某物,rake assets:clobber, git add, git commit, git push, git heroku master) 并且它有效:它cpmpiles并发送最新的js文件!
    有没有办法不必记住每一次在js内部更改某事以确保编译的时间?

    我没有想法了。也许我的设置是错误的,作为初学者,我错过了一些明显的东西。

    最奇怪的是:我的 cs 被缩小了!为什么不是js????

    我的代码库

    /config/environments/development.rb
    MyApp::Application.configure do
    # Do not compress assets
    config.assets.compress = false

    # Expands the lines which load the assets
    config.assets.debug = true

    config.serve_static_files = false
    end

    /config/environments/production.rb
    MyApp::Application.configure do

    # Disable Rails's static asset server (Apache or nginx will already do this)
    config.serve_static_files = false

    # Compress JavaScripts and CSS
    # config.assets.compress = true removed when switch from Rails 3.2 to Rails 4
    config.assets.js_compressor = :uglifier
    config.assets.js_compressor = Uglifier.new(
    # Remove all console.* functions
    :compress => { :drop_console => true }
    ) if defined? Uglifier
    config.assets.css_compressor = :sass

    # Don't fallback to assets pipeline if a precompiled asset is missed
    config.assets.compile = false

    # Generate digests for assets URLs
    config.assets.digest = true

    config.force_ssl = true

    end

    /config/initializers/assets.rb
    Rails.application.configure do
    # Precompile additional assets.
    # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.

    # related to deployment pb with active admin
    config.assets.precompile += %w[admin/active_admin.css admin/active_admin.js]

    # for ckeditor: github.com/galetahub/ckeditor
    config.assets.precompile += %w( ckeditor/* )

    # Version of your assets, change this if you want to expire all your assets
    config.assets.version = '1.0'

    end

    /config/application.rb
    require File.expand_path('../boot', __FILE__)

    require "active_record/railtie"
    require "action_controller/railtie"
    require "action_mailer/railtie"
    require "active_resource/railtie"
    require "sprockets/railtie"

    if defined?(Bundler)
    # If you precompile assets before deploying to production, use this line
    Bundler.require(*Rails.groups(:assets => %w(development test)))
    end

    module MyApp
    class Application < Rails::Application

    config.autoload_paths += %W(#{config.root}/lib)
    # Enable the asset pipeline
    config.assets.enabled = true
    end
    end

    /Guardfile
    # More info at https://github.com/guard/guard#readme
    require 'active_support' # edded this due to a bug where guard did not load github.com/rails/rails/issues/14664
    require 'active_support/core_ext'

    require 'active_support/inflector'

    # Make sure this guard is ABOVE any other guards using assets such as jasmine-headless-webkit
    # It is recommended to make explicit list of assets in `config/application.rb`
    # config.assets.precompile = ['application.js', 'application.css', 'all-ie.css']
    # update dec 2014- added :runner => :cli because of a know bug on guard rail assets
    # if bug is solved i can remove the part :runner=> cli
    guard 'rails-assets', :run_on => [:start, :change], :runner => :cli do
    watch(%r{^app/assets/.+$})
    watch('config/application.rb')
    end

    Assets /javascripts/application.js
    //= require jquery
    //= require jquery.turbolinks
    //= require jquery_ujs
    //= require jquery.cookie
    //= require cloudinary-jquery.min
    //= require twitter/bootstrap
    //= require paloma
    //= require html5shiv-printshiv
    //= require storageService
    //= require turbolinks
    //= require_directory .

    部署后的终端进程,例如更改一些 js 文件和等待守卫通知我它已完成其预编译工作:
    git add --all
    git commit -a -m "fix issue with asset pipeline"
    git push
    git push heroku master

    最佳答案

    我知道我要说的不是传统的,但是您的方法并没有那么明确,您应该尝试添加您在开发中所做的显式压缩调用

    /config/environments/production.rb

    MyApp::Application.configure do
    # Compress assets please
    config.assets.compress = true
    # ... other stuff
    end

    之后清理您的 Assets 并重新生成它们
    $ bundle exec rake assets:clobber
    $ RAILS_ENV=production bundle exec rake assets:precompile

    关于ruby-on-rails - Ruby on Rails 4.2 Assets 管道不会缩小/压缩 application-fingerprinted.js JS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48702850/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com