2012-07-17 3 views
2

로컬로 자산을 컴파일하는 사용자 지정 capistrano 작업을 작성한 다음 rsync를 사용하여 프로덕션 서버로 밀어 넣으려고합니다. 문제는 capistrano의 run_locally을 사용할 때 내 앱 서버의 IP 주소에 액세스하는 방법을 파악할 수 없다는 것입니다.Capistrano 작업에서 원격 IP 가져 오기

server "[some_ip_address]", :web, :app, :db, :primary => true 

... 

namespace :assets do 
    desc 'Run the precompile task locally and rsync with shared' 
    task :precompile, :roles => :web, :except => { :no_release => true } do 

    run_locally "bundle exec rake assets:precompile" 
    run_locally "rsync -zvrh --progress -e 'ssh -i #{ssh_options[:keys][0]}' public/assets #{user}@$CAPISTRANO:HOST$:#{shared_path}" 
    puts "cleaning up locally compiled assets" 
    run_locally "bundle exec rake assets:clean" 
    end 
end 

문제는 $CAPISTRANO:HOST$가 IP에게 확장하지 않는다는 것입니다 : 여기

config/deploy.rb에서 발췌 한 것입니다. 나는 그것을 어렵게 코드화 할 수 있다는 것을 알고 있지만, 나는 그것을 올바르게하고 싶다.

set :host, "some IP addresss" 
server host, :web, :app, :db, :primary => true 

을하고 작업 정의 :

run_locally "... #{host} ..." 

답변

2

봅니다 DRY을 유지하기 위해 호스트 IP와 카피 스트라 노 변수를 정의하고 카피 스트라 노 스크립트에서 어디를 참조합니다 run과 동일한 문자열 대체가 있으므로 $CAPISTRANO:HOST$이 작동하지 않습니다. 당신이하려고하는 모든 자산이 미리 컴파일 한 경우

, 당신은 당신의 deploy.rb에 다음 줄을 추가 할 수 있습니다

load 'deploy/assets' 
+0

이것은 정확히 내가 찾고있는 것입니다. 감사! – Matthew

0

불행하게도, run_locally하지 않는

+0

아이디어를 가져 주셔서 감사 합니다만 이미 'load'deploy/assets''을 사용하고 있으며 서버의 자산을 사전 컴파일하는 것은 너무 느립니다. 그래서 로컬에서 사전 컴파일하고 'rsync'하려고합니다. – Matthew

0

당신이 Socket 또는 Addrinfogetaddrinfo를 사용하여 시도 적이 있습니까?

1.9.3p125 :035 > Addrinfo::getaddrinfo('ya.ru', 'http', :INET, :STREAM)[0].ip_address 
=> "93.158.134.203" 
1.9.3p125 :037 > Socket::getaddrinfo('ya.ru', 'http', :INET, :STREAM)[0][3] 
=> "93.158.134.3" 
0

내가 이러한 옵션을 발견했습니다 놀리려는 보석을 사용하여 :

run_locally %{bundle exec rake assets:precompile} 
    roles[:web].servers.each do |web_server| 
    run_locally %{rsync --recursive --times --rsh=ssh --compress --human-readable --progress public/assets #{user}@#{web_server.host}:#{shared_path}} 
    end 
    run_locally %{bundle exec rake assets:clean} 

PS합니다. 나는 똑같은 일을하려하고이 질문을 발견했다 :)

또 다른 옵션은 turbo-sprockets-rails3 gem이다.

관련 문제