database.yml
是从bashrc
读取AWS密钥的正确位置吗? database.yml
听起来仅是数据库配置的地方。是否可以在我的Rails应用程序中读取来自bashrc的AWS配置的更合适的地方?
答案 0 :(得分:0)
绝对。配置诸如AWS之类的东西的标准位置位于config/initializers
内部。您可以在其中创建一个名为aws.rb
的文件。
app/
bin/
config/
|__ initializers/
|__ aws.rb
在此文件中,您可以使用bashr中的环境变量配置AWS设置
Aws.config.update({
credentials: Aws::Credentials.new('your_access_key_id', 'your_secret_access_key')
})
此目录中的文件是在应用启动时执行的,因此此配置将在您的应用启动后即开始处理请求之前立即执行。
注意到AWS SDK for Ruby将自动搜索特定的环境变量以进行自我配置也可能很有用。如果您使用的是这种方法,并且在bashrc中设置了以下环境变量
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
然后,您无需在Rails应用程序中任何其他代码即可配置AWS。查看更多详细信息here。
答案 1 :(得分:0)
从5.2版开始
Rails 5.2引入了encrypted credentials的概念。基本上,从Rails 5.2开始,在config/credentials.yml.enc
中初始化应用程序时会生成一个加密的凭证文件。该文件是加密的,因此可以推送到您的源代码管理工具。在初始化应用程序时还会生成一个master.key
文件,可用于解密凭据文件并对其进行更改。
因此,可以将AWS的凭据添加为:
aws:
access_key_id: 123
secret_access_key: 345
这些键可以在您的应用中以Rails.application.credentials.aws[:secret_access_key]
的形式访问。其他敏感配置,例如正在使用的其他外部服务的凭据,也可以添加到此配置中。 Check out this blog by Marcelo Casiraghi了解更多详情。
Pre Rails 5.2
Rails 5.2之前没有凭证系统的概念。您可以通过两种方式尝试提出一种解决方案来存储您的配置。
A。您可以创建YAML
文件来从头开始定义配置。
my_config.yml
的文件并将其放在config
文件夹中。路径:config/my_config.yml
YAML
格式向文件添加所需的任何配置(上面针对AWS进行了描述)application.rb
中进行更改以如下所示在初始化期间加载此文件: APP_CONFIG = YAML.load(ERB.new(File.new(File.expand_path('../my_config.yml', __FILE__)).read).result)[Rails.env] rescue {}
APP_CONFIG['aws']['access_key_id']
。对于此用例,强烈建议为开发和生产环境使用单独的配置文件。生产文件可能不应该签入版本控制以确保安全。B。另一种方法是使用一些gem管理诸如railsconfig/config
这样的配置注意:要回答有关将此配置存储在database.yml
中的问题,强烈建议不要这样做。 database.yml
是用于存储与数据库相关的配置的配置文件。关注点分离在扩展任何应用程序时确实有帮助,因此,建议将此类配置放在单独的文件中,该文件可以独立维护,而无需依赖数据库配置。