capistrano - 写database.yml

时间:2011-09-07 20:24:59

标签: ruby-on-rails capistrano

我尝试编写一个capistrano部署脚本,通过用户输入设置数据库凭据。

在我的部署文件中:

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

运行'cap deploy'并输入用户名和密码后,脚本失败并显示消息“No such file or directory - /var/www/rails_app/current/config/database.yml(Errno :: ENOENT)”。

此路径下的文件存在于服务器上,我也在我的git repo中。

我无法弄清楚无法找到该文件的原因。 任何提示?

1 个答案:

答案 0 :(得分:1)

Yaml::load在您运行cap deploy的计算机上本地执行,这就是找不到该文件远程搜索的原因。

看看这个宝石:capistrano-recipes,如果你想要,你可以使用它。否则要了解他们的行为here

为了完整起见,您可以在封面配方中阅读远程文件

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

capture将执行远程命令并将其输出作为字符串返回。