24

嗨,我在 heroku 和 github 上有我的 rails 应用程序,目前在我的应用程序中使用邮件程序:

ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :user_name            => "myemail@gmail.com",
  :password             => "PasswordShouldGoHere",
  :authentication       => "plain",
  :enable_starttls_auto => true
}

我不希望我的电子邮件和密码在我的 github 帐户上可见,因为人们可以登录并窃取我的信息。但是,如果我输入了一个假密码,那么当邮件程序应该发送时,我的应用程序会在 heroku 上给我一个错误。我知道我可以先将真实的电子邮件和密码推送到 heroku,然后对其进行编辑并将假密码放在我的 github 帐户中,但是有更好的方法吗?

4

3 回答 3

50

就像其他人说的那样,您可以通过使用ENV变量来实现这种安全性。这是如何做到的:

config.action_mailer.smtp_settings = {
  user_name: ENV["MAILER_EMAIL"],
  password: ENV["MAILER_PASSWORD"]
}

现在,在生产环境(Heroku)中,您所要做的就是遵循本指南。它基本上相当于打开您的控制台并输入以下内容:

heroku config:set MAILER_EMAIL=email@example.com MAILER_PASSWORD=password

开发中,您可以在 config/initializers 文件夹中创建一个文件,其名称为app_env_vars.rb. 在其中放置以下内容:

ENV['MAILER_EMAIL'] = 'email@example.com'
ENV['MAILER_PASSWORD'] = 'password'

为了防止这个新创建的文件被推送到您的源代码管理中,您应该将它添加到您的.gitignore

/config/initializers/app_env_vars.rb

但是,有一个问题,因为初始化文件只在环境之后加载,所以还有最后一件事要做。转到您的文件并在之前environment.rb添加以下内容:Yourapp::Application.initialize!

# Load the app's custom environment variables here, before environments/*.rb
app_env_vars = File.join(Rails.root, 'config', 'initializers', 'app_env_vars.rb')
load(app_env_vars) if File.exists?(app_env_vars)

你完成了!

但是,如果您觉得所有这些配置都很麻烦,那么我建议您使用Figaro gem。它完成了我所描述的一切,甚至更多!

于 2012-11-08T19:22:24.103 回答
4

我建议使用figaro gem来管理配置设置。它用于ENV存储设置,这正是 Heroku 上的应用程序的配置方式。

于 2012-11-08T17:32:34.183 回答
0

看看这个Rails 应用程序教程

“使用 Gmail 帐户”部分显示了此示例配置:

config.action_mailer.smtp_settings = {
  address: "smtp.gmail.com",
  port: 587,
  domain: "example.com",
  authentication: "plain",
  enable_starttls_auto: true,
  user_name: ENV["GMAIL_USERNAME"],
  password: ENV["GMAIL_PASSWORD"]
}

~/.bashrc并建议在您的服务器上设置变量:

export GMAIL_USERNAME="myname@gmail.com"
export GMAIL_PASSWORD="secret*"

如果应用服务器没有从~/.bashrc. 这在很大程度上取决于您的应用服务器是什么。

于 2012-11-08T18:40:55.200 回答