25

나는 실행중인 레일스 3.2.1 응용 프로그램을 갖고 있는데, 나는 과 함께 카피스트라노를 통해 배포 할 것이고 deploy:assets:precompile 작업을 실행합니다.Rails 3 에셋을 더 빠르게 프리 컴파일 할 수있게하려면 어떻게해야합니까?

컴파일 자체가 매우 느린 것을 제외하면 모든 것이 잘 작동합니다. 나는 그다지 CSS와 자바 스크립트 (총 약 8200 라인)가 없다.

자산을 컴파일하는 데 일반적으로 약 1 ~ 3 분이 소요되며 전체 배포 시간의 약 90 %입니다.

최적화 방법이 있습니까? 어쩌면 다른 프로 시저를 사용하여 자산을 컴파일하거나 어떻게 든 그것을 최적화 할 수 있습니까?

1.9.2-p290, Rails 3.2.1의 Linode 512에서 앱을 실행 중이고 관련성이있는 경우 therubyracer 보석을 사용하고 있습니다.

+0

가장 빠른 서버에서 컴파일하고이 컴파일 후에 커밋하십시오. – shingara

+0

config.assets.initialize_on_precompile을 어떻게 설정 했습니까? –

답변

21

더 빠른 실행에 대한 대답이 아니지만 "다른 절차"가 진행되는 동안 실제 자산을 변경 한 경우에만 Capistrano에 자산을 사전 컴파일하도록 지시 할 수 있습니다. 사용자는 assets:precompile 사용자 지정 작업을 수행하여 기존 코드와 새로 배포 된 코드 사이의 git 로그를 살펴볼 수 있습니다. 나를 위해,이 위대한 일을하고 자산을 업데이트 할 때 지금은 느린 전개를 처리해야합니다

namespace :deploy do 
    namespace :assets do 
    task :precompile, :roles => :web, :except => { :no_release => true } do 
     from = source.next_revision(current_revision) 
     if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0 
     run %Q{cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile} 
     else 
     logger.info "Skipping asset pre-compilation because there were no asset changes" 
     end 
    end 
    end 
end 

자료 : http://www.bencurtis.com/2011/12/skipping-asset-compilation-with-capistrano/

16

난 그냥 레일 안쪽이 문제를 해결하기 위해 보석을 서면으로 작성했습니다, turbo-sprockets-rails3라고 . assets:precompile은 변경된 파일을 다시 컴파일하고 한 번만 컴파일하여 모든 자산을 생성함으로써 속도를 향상시킵니다. 애셋 디렉토리는 출시 사이에 공유되므로 Capistrano는 기본적으로 작동합니다.

turbo-sprockets-rails3 보석을 시험해 볼 수 있으면 도움이되며 문제가 있는지 알려주세요.

관련 문제