2011-09-07 37 views
0

我嘗試編寫一個capistrano部署腳本,通過用戶輸入設置數據庫憑據。capistrano - 寫入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倉庫中。

我找不出爲什麼找不到文件。 任何提示?

回答

1

Yaml::load在您運行的機器上本地執行cap deploy這就是爲什麼沒有找到該文件,它不是遠程搜索。

看看這個寶石:capistrano-recipes,如果你願意,你可以使用它。否則,學習他們是如何做的here

爲了完整這裏是如何在一個帽配方

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

capture將執行遠程命令,並返回其輸出作爲一個字符串讀遠程文件。

+1

不要使用捕獲!捕獲將只適用於第一臺服務器,如果其他服務器產生了不同的結果,你不會注意到! – knocte

+0

錯字:s/out/output / – knocte