【问题标题】:In Rails 4, how can I have a Rake task minify my assets?在 Rails 4 中,如何让 Rake 任务最小化我的资产?
【发布时间】:2017-08-08 00:31:14
【问题描述】:

我需要将我的一部分资产导出到一些外部网站。为此,我创建了一个 rake 任务:

rake build:navbar

问题是我无法让资产库缩小我的库。这是我的任务方法中的代码:

desc "Build navbar assets and markup for other sites."
task navbar: :environment do

  # Set environment to production so pipeline will minify assets.
  Rails.env = "production"

  # Some setup code removed...

  # How do we coax assets into minifying files?
  Rails.application.config.assets.prefix = "../build/navbar/staging"
  Rails.application.config.assets.js_compressor = :uglifier
  Rails.application.config.assets.css_compressor = :sass
  Rails.application.config.assets.digest = false
  Rails.application.config.assets.compress = true
  Rails.application.config.assets.debug = false
  Rails.application.config.assets.paths = [Rails.root.join('/app/assets/javascripts'),
                                           Rails.root.join('/app/assets/stylesheets/navbar')]
  Rails.application.config.assets.precompile = ['navbar.js', 'navbar.css']

  # Compile now.
  Rake::Task['assets:clean'].invoke
  Rake::Task['assets:precompile'].invoke

  # Cleanup code removed...
end

它将生成我的资产的压缩版本 (navbar.css.gz),但不会生成缩小版本 (navbar.min.css)。

我已经在谷歌上上下搜索了这个,似乎这个设置方法应该可以解决问题。我错过了什么?

【问题讨论】:

    标签: ruby-on-rails-4 rake asset-pipeline


    【解决方案1】:

    我想我已经确定了根本问题。资产管道任务,即sprockets-rails,不完全尊重配置设置。它似乎会根据 Rails 环境覆盖一些设置。而且你不能简单地change the Rails environment within a rake task

    再次,目标是使用此 rake 命令将 Rails 应用程序资产的子集移植到另一个项目:

    rake build:navbar
    

    以下是一些示例代码,展示了我如何解决这些问题:

    namespace :build do
      desc "Build navbar assets and markup."
      task navbar: :environment do
        # Prep Builder
        builder = Navbar::Builder.new(target: target)
        builder.prep_build
    
        # Why this? Setting Rails.env or ENV['RAILS_ENV'] didn't work.
        system("rake build:navbar_assets RAILS_ENV=production")
    
        builder.generate_markup_file
        builder.move_output_files_to_build_directory
        builder.cleanup
      end
    
      desc "Build navbar assets."
      task navbar_assets: :environment do
        # Configure the asset pipeline to compile minified files.
        # NOTE: Sprockets only minifies files in production environment (or won't
        # do it in development) so this assumes RAILS_ENV is set to production
        # on the command line.
        Rails.application.config.assets.prefix = "../build/navbar/staging"
        Rails.application.config.assets.paths = [Rails.root.join('app/assets/javascripts'),
                                                 Rails.root.join('app/assets/stylesheets')]
        Rails.application.config.assets.precompile += ['navbar.js', 'navbar.css']
    
        # Let it rip.
        Rake::Task['assets:clobber'].invoke
        Rake::Task['assets:precompile'].invoke
      end
    end
    

    问题中的代码中的文件路径构建也存在一些问题。这些已经更正了。

    【讨论】:

      猜你喜欢
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2016-11-13
      相关资源
      最近更新 更多