ActionMailer密码安全性
我是疯了,还是在实际(开发/生产)配置文件中保留ActionMailer的SMTP用户名和密码是个坏主意? 我似乎应该将它存储在一个加密的地方,或者至少将它从我的Mercurial推送中排除。
现在,我只是在执行推送之前从源文件中删除密码,但是必须比我正在使用的方式更聪明。 🙂
也许我应该将它作为另一个用户(已经存储有加密密码)存储在我的数据库中并以编程方式获取它?
使用未存储在存储库中的应用程序配置文件来存储敏感信息。 我是这样做的:
-
在
config
目录中添加app_config.yml
。 它的内容如下所示:smtp_password: kl240jvfslkr32rKgjlk some_other_password: 34hg9r0j0g402jg and_so_on: lkn$@gJkjgsFLK4gaj
-
在
config
目录中添加preinitializer.rb
,其中包含以下内容:require 'yaml' APP_CONFIG = YAML.load(File.read(RAILS_ROOT + "/config/app_config.yml"))
-
用您的密码替换
APP_CONFIG
变量中的值,如下所示:smtp_password = kl240jvfslkr32rKgjlk # old version smtp_password = APP_CONFIG['smtp_password'] # new version
确保您的存储库中不包含app_config.yml
,但您可能希望创建一个已签入的示例文件,只是为了显示其中应包含的内容的示例。 部署应用程序时,请确保app_config.yml
存储在服务器上。 如果您正在使用标准的Capistrano部署,请将该文件放在共享文件夹中并更新部署任务,以便在当前版本的目录中为其创建符号链接。
Jimmy的答案是完美的(+ 1),我还要注意Github已经为每种语言推荐了.gitignore文件,Rails就在这里注意它包含config / * .yml,这样就没有config / yml文件在资源库中首先。 可能是一个很好的举动。
使用Capistrano在部署时要求这些东西:设置方式与数据库内容相同:
task :my_silly_task do sendgrid_password = Capistrano::CLI.password_prompt("Sendgrid password: ") require 'yaml' spec = {... whatever yaml you need -- probably what Jimmy said...} run "mkdir -p #{shared_path}/config" put(spec.to_yaml, "#{shared_path}/config/mailer_config.yml") end
- 如果结果包含正则表达式特殊字符,为什么我不能对扫描的每个结果执行gsub?
- 安装linecache时在Windows机器上接收错误错误:无法构建gem本机扩展
- 在Rails中,我应该启用serve_static_assets吗?
- 播种未通过嵌套表validation(validates_presence_of)
- 单击#new&#edit时如何停止NoMethodError?
- 在Mac OS X上完全重新安装Ruby Rails和Gem
- Rails初学者 – 查询多个表以一次检索大量信息的最佳实践
- Ruby / Rails的编码样式检查器或代码格式化程序
- 关于迁移:nil的未定义方法`to_sym’:NilClass