我尝试编写一个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中。
我无法弄清楚无法找到该文件的原因。 任何提示?
答案 0 :(得分:1)
Yaml::load
在您运行cap deploy
的计算机上本地执行,这就是找不到该文件远程搜索的原因。
看看这个宝石:capistrano-recipes,如果你想要,你可以使用它。否则要了解他们的行为here
为了完整起见,您可以在封面配方中阅读远程文件
file = capture "cat #{shared_path}/config/database.yml"
capture将执行远程命令并将其输出作为字符串返回。