2017-03-16 3 views
0

Ich muss eine Teilmenge meiner Assets an einige externe Sites exportieren. Ich habe eine Harke Aufgabe erstellt, das zu tun:In Rails 4, wie kann ich eine Rake-Aufgabe haben, um meine Assets zu minimieren?

rake build:navbar 

Das Problem ist, ich nicht das Vermögen Bibliothek bekommen kann meine Bibliothek minify. Hier ist der Code von meiner Aufgabe Methode:

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 

Es erzeugt eine Druck Version meines Vermögens (navbar.css.gz), nicht aber eine verkleinerte Version (navbar.min.css).

Ich habe dies auf und ab googled und es scheint, als ob dieses Rezept der Einstellungen den Trick tun sollte. Was vermisse ich?

Antwort

0

Ich denke, ich habe das zugrunde liegende Problem identifiziert. Die Assets-Pipeline-Aufgabe, d. H. sprockets-rails, berücksichtigt die Konfigurationseinstellungen nicht vollständig. Es scheint einige Einstellungen abhängig von der Rails-Umgebung zu überschreiben. Und Sie können nicht einfach change the Rails environment within a rake task.

Das Ziel ist wieder, in dem Hafen eine Teilmenge der diesen Rake-Befehl für ein anderes Projekt Vermögen der Rails-Anwendung:

rake build:navbar 

Hier einiger Beispielcode, der zeigt, wie ich zu diesen Themen gearbeitet:

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 

Es gab auch einige Probleme mit dem Erstellen von Dateipfaden im Code in der Frage. Diese wurden korrigiert.

Verwandte Themen