瘦服务器不使用Capistrano加载环境变量

时间:2012-11-16 14:01:58

标签: ruby-on-rails deployment environment-variables capistrano thin

我正在使用capistrano部署我的rails应用程序并使用瘦服务器。我有2个env vars用于我的邮件用户名和密码在〜/ .bash_profile中使用export SMTP_USERNAME=...定义。

当我ssh到服务器并尝试从rails控制台发送电子邮件时,它工作正常但看起来当我运行cap deploy或任何其他命令时它们不会被瘦。

定义它们的正确方法是什么?我已经看到一些帖子,他们建议直接在config/environments/production.rb或与代码本身相关的其他文件中定义它们。出于安全原因,我试图避免这种情况。

更新:我尝试使用yml文件来存储,但我遇到了这个问题:

我在email_config.rb中创建了一个新文件config/initializers。其内容是:

EMAIL_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/email.yml")[RAILS_ENV]

config/email.yml我有:

production:
    username: username
    password: password

config/environments/production.rb我有:

config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default :charset => "utf-8"
config.action_mailer.smtp_settings = {
  address: "smtp.gmail.com",
  port: 587,
  authentication: :plain,
  enable_starttls_auto: true,
  user_name: EMAIL_CONFIG[:username],
  password: EMAIL_CONFIG[:password]
}

现在的问题是初始化器是在environments.rb之后加载的,如果我在电子邮件配置之前放置了EMAIL_CONFIG变量的定义,那么RAILS_ROOT变量就没有定义。 / p>

1 个答案:

答案 0 :(得分:0)

就像你说的那样,直接在production.rb中保存密码不是神的想法。更好的选择是从shell变量(更接近当前设置)或yaml文件(我个人做)中引用它们。您可以在this post

中找到更多信息