2011-09-07 36 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