您好我在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帐户上,但是有更好的方法吗?
答案 0 :(得分:48)
与其他人一样,您可以使用ENV
变量来实现此安全性。这是如何做到的:
config.action_mailer.smtp_settings = {
user_name: ENV["MAILER_EMAIL"],
password: ENV["MAILER_PASSWORD"]
}
现在,在生产(Heroku)中,您所要做的只是follow this guide。它基本上等于打开你的控制台并键入:
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。它完成了我描述的所有内容以及更多内容!
答案 1 :(得分:4)
我建议使用figaro gem来管理配置设置。它使用ENV
来存储设置,它确切地说是如何配置Heroku上的应用。
答案 2 :(得分:0)
看看这个Rails Apps Tutorial。
“使用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
读取环境,您可能需要将它们设置在其他位置。这非常依赖于您的应用服务器。