我正在使用Active Shipping Gem / API,您需要拥有登录名和密码才能连接各种邮政服务,例如:联邦快递或加拿大邮政。目前,我已将每个服务硬编码为控制器中的单独方法。我欢迎有关如何更安全地做到这一点的建议。谢谢
答案 0 :(得分:1)
您可以在单独的文件中为所有密码执行此操作,然后不将该文件检入任何公共存储库。为此,您需要修改application.rb
以查找包含所有密码的文件:
<强>配置/ application.rb中强>
...
# Moving ENV variables into one place (config/application.yml)
config = YAML.load(File.read(File.expand_path('../application.yml', __FILE__)))
config.merge! config.fetch(Rails.env, {})
config.each do |key, value|
ENV[key] = value unless value.kind_of? Hash
end
...
module Myapp
class Application < Rails::Application
...
config / application.yml (示例值)
## Rails
SECRET_TOKEN: 'asdfasfce336863e6asdfasdfasdf917ba42e6580fbbd42c01f19364a8f463ed377e46851360e3f282b0cdaf7b6332ed9e292c5e98e01acsasdf'
## Amazon
AWS_ACCESS_KEY_ID: 'ascdaewecaewewf'
AWS_SECRET_KEY: 'asdfasdcae/asdfac'
AWS_REDIRECT_URL: 'aws/success'
## Environment-specific
development:
MAILER_HOST: "localhost:3000"
REDISTOGO_URL: 'redis://@localhost:6379'
S3_BUCKET_NAME: "myapp-staging"
test:
MAILER_HOST: "test.local"
REDISTOGO_URL: 'redis://@localhost:6379'
S3_BUCKET_NAME: "myapp-staging"
production:
MAILER_HOST: "myapp.com"
S3_BUCKET_NAME: "myapp"
S3_BUCKET_ADDRESS: "https://myapp.s3.amazonaws.com/"
然后,您可以通过环境变量在整个应用中访问此信息:
ENV['AWS_ACCESS_KEY_ID']
通常把密码放在哪里。
这样可以轻松地在一个地方更改任何内容,并且可以更轻松地管理哪些开发人员可以查看敏感信息。
修改强>
如果您有订阅,还有一个很好的Railscast:http://railscasts.com/episodes/85-yaml-configuration-revised