2011-09-07 7 views
0

사용자 입력을 통해 데이터베이스 자격 증명을 설정하는 capistrano 배치 스크립트를 작성하려고합니다. 내 배포 파일에서capistrano - write database.yml

:

after "deploy:update_code", "db:write_credentials" 
namespace :db do 
task :write_credentials do 
    @username = Capistrano::CLI.password_prompt('mysql_username: ') 
    @password = Capistrano::CLI.password_prompt('mysql_password: ') 
    @config = YAML::load(File.open("#{current_path}/config/database.yml"))['production'] 
    @config["username"] = @username 
    @config["password"] = @password 
    end 
end 

'캡 배포'를 실행하고 스크립트가 메시지 "해당 파일이나 디렉토리 실패 사용자 이름과 암호를 입력 한 후 -은/var/www /에서 rails_app/전류/config/database.yml (Errno :: ENOENT) "를 입력하십시오.

이 경로 아래에있는 파일은 서버에 있으며 내 git repo에도 있습니다.

파일을 찾을 수없는 이유를 알 수 없습니다. 힌트가 있습니까?

답변

1

Yaml::load은 사용자가 cap deploy을 실행하는 컴퓨터에서 로컬로 실행되므로이 ​​파일을 원격으로 검색 할 수없는 이유입니다.

원한다면이 보석을보십시오 : capistrano-recipes, 그것을 사용할 수 있습니다. 그렇지 않으면 그들은 완성도를 들어 here

여기 당신이 원격 명령을 실행하고 문자열로 출력을 반환하는 캡 조리법

file = capture "cat #{shared_path}/config/database.yml" 

capture에서 원격 파일을 읽을 수있는 방법입니다하고있는 방법을 배울 수 있습니다 .

+1

캡처 사용하지 마십시오! 캡처는 첫 번째 서버에서만 작동합니다. 다른 서버가 다른 서버를 생성하면 알 수 없습니다! – knocte

+0

오타 : s/출력/출력 / – knocte