让Capistrano从提示符插入密码到Environment.rb文件

时间:2009-12-08 01:20:21

标签: ruby-on-rails capistrano

我正在使用Action Mailer并在我的environment.rb文件中为Action Mailer配置了我的配置。我想将我的项目与environment.rb文件一起发布到公共存储库中,但我不想包含我的邮件服务器的登录信息。如何配置Capistrano的deploy.rb,以便提示用户输入邮件服务器设置,然后在Capistrano部署期间修改或创建environment.rb文件。

感谢您寻找=)

2 个答案:

答案 0 :(得分:5)

这方面有很多其他变化...请参阅此博客文章以获取更多想法: http://www.simonecarletti.com/blog/2009/06/capistrano-and-database-yml

这是一个开始...

将其添加到您的production.rb环境文件中:

ActionMailer::Base.smtp_settings = File.expand_path(File.join(RAILS_ROOT, 'config', 'actionmailer.yml'))

在capistrano任务中,你可以这样做:

desc "Generate actionmailer.yml file" 
task :generate_actionmailer_yml, :roles=>:app do
  secret_password = Capistrano::CLI.ui.ask "Enter your secret mail password:"

  template = File.read("config/deploy/actionmailer.yml.erb")
  buffer = ERB.new(template).result(binding)
  put buffer, "#{shared_path}/config/actionmailer.yml"
end

desc "Link actionmailer.yml from shared" 
task :link_actionmailer_yml, :roles=>:app do
  run "rm -f #{current_path}/config/actionmailer.yml && ln -s #{shared_path}/config/actionmailer.yml #{current_path}/config/actionmailer.yml"
end

after "deploy:finalize_update", "deploy:link_actionmailer_yml"

然后,您创建一个模板actionmailer.yml.erb文件:

address: "my.smtp.com"
port: 587
authentication: :plain
user_name: "user@name.com"
password: <%= secret_password %>

答案 1 :(得分:0)

我会建议使用Capistrano::CLI.password_prompt方法而不是Capistrano::CLI.ui.ask方法来添加@jkrall的答案,这样密码就不会回显到标准输入。