2017-03-16 7 views
0

자산의 일부를 외부 사이트로 내 보내야합니다. 그 작업을 위해 레이크 작업을 만들었습니다.Rails 4에서 Rake 태스크로 자산을 축소 할 수 있습니까?

rake build:navbar 

문제는 내 라이브러리를 축소하기 위해 자산 라이브러리를 가져올 수 없다는 것입니다. 그것은 내 자산 (navbar.css.gz)의 압축 버전을 생성합니다

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.min.css) : 여기 내 작업 방법의 코드입니다.

나는 이것을 위아래로 봤는데, 설정의이 제조법이 트릭을 수행해야하는 것처럼 보입니다. 내가 뭘 놓치고 있니?

답변

0

나는 근본적인 문제를 발견했다고 생각합니다. 애셋 파이프 라인 작업 (예 : sprockets-rails)은 구성 설정을 완전히 준수하지 않습니다. 그것은 레일 환경에 따라 일부 설정을 무시하는 것 같습니다. 단순하게 change the Rails environment within a rake task 일 수는 없습니다.

: 나는이 문제를 해결할 방법을 보여 일부 샘플 코드 여기

rake build:navbar 

것 :

목표는 다시 포트에이 레이크 명령을 사용하여 다른 프로젝트에 대한 Rails 애플리케이션의 자산의 부분 집합이다

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 

질문의 코드에 파일 경로 작성과 관련된 몇 가지 문제가있었습니다. 그것들은 바로 잡혔다.