2017-03-16 67 views
0

我需要将我的资产的一个子集导出到某些外部网站。我创建了一个rake任务要做到这一点:在Rails 4中,我怎样才能让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)。

我已经使用了这个向上和向下看起来像这个设置的食谱应该做的伎俩。我错过了什么?

回答

0

我想我已经确定了潜在的问题。资产管道任务(即sprockets-rails)不完全遵守配置设置。它似乎覆盖取决于Rails环境的一些设置。你不能简单地change the Rails environment within a rake task

的目标,又是港口Rails应用程序的资产使用此rake命令另一个项目的一个子集:

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 

问题中代码中的文件路径构建也存在一些问题。那些已被纠正。