gpt4 book ai didi

ruby-on-rails - 如何使用环境变量来避免在 database.yml 中硬编码 postgresql 的用户名和密码?

转载 作者:行者123 更新时间:2023-12-03 16:17:59 26 4
gpt4 key购买 nike

我创建了一个名为 sample_app 的新 Rails 应用程序,并使用 postgresql 作为我的数据库(我已经创建了一个 postgresql 用户名和密码)。我使用此设置指南 https://gorails.com/setup/ubuntu/16.04

所以我运行这个命令 rails new sample_app -d postgresql .然后我必须编辑 config/database.yml将用户名和密码与我刚刚创建的 postgresql 的用户名和密码相匹配。但我不想硬编码,因为我将使用 git。

我从 digital ocean 中找到了这个教程,建议使用:

username: <%= ENV['APPNAME_DATABASE_USER'] %>
password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>

这是正确的代码吗?如果是这样,由于我的应用程序名为 sample_app,我的代码应该是?
username: <%= ENV['SAMPLE_APP_DATABASE_USER'] %>
password: <%= ENV['SAMPLE_APP_DATABASE_PASSWORD'] %>

如果这不是正确的,你能帮我吗?谢谢!

最佳答案

您可以通过多种方式设置环境变量。

这里有两个,

选项一:通过 yml 文件设置 ENV 变量

创建文件 config/local_env.yml :

配置/local_env.yml:

SAMPLE_APP_DATABASE_USER: 'your username'
SAMPLE_APP_DATABASE_PASSWORD: '******'

以上是您将使用的名称,例如 ENV['SAMPLE_APP_DATABASE_USER'] . 这些可以是你想要的名字 .你可以取任何名字,但 我们应该在 ENV 引用中使用相同的名称 .

将其添加到 gitignore:
/config/local_env.yml
更改 application.rb 中的一些代码

应用程序.rb:
config.before_configuration do
env_file = File.join(Rails.root, 'config', 'local_env.yml')
YAML.load(File.open(env_file)).each do |key, value|
ENV[key.to_s] = value
end if File.exists?(env_file)
end

代码打开 config/local_env.yml 文件,读取每个键/值对,并设置环境变量。

使用环境变量:
username: <%= ENV['SAMPLE_APP_DATABASE_USER'] %>
password: <%= ENV['SAMPLE_APP_DATABASE_PASSWORD'] %>

选项二:使用费加罗 gem

gem 利用了 Ruby 设置环境变量以及读取它们的能力。 gem 上写着 config/application.yml在 Rails 应用程序中配置任何其他内容之前,文件并设置环境变量。

这是如何使用它。在您的 Gemfile 中,添加:

gem 'figaro'

并运行 bundle install

gem 提供了一个生成器:

$ bundle exec figaro install

生成器创建一个 config/application.yml 文件并修改 .gitignore file以防止文件被检入 git 存储库。

您可以将环境变量作为键/值对添加到 config/application.yml :
SAMPLE_APP_DATABASE_USER: 'your username'
SAMPLE_APP_DATABASE_PASSWORD: '******'

环境变量将作为 ENV 变量在您的应用程序中的任何位置可用:

ENV["SAMPLE_APP_DATABASE_USER"]

Here are the remaining ways you can achieve the same.

关于ruby-on-rails - 如何使用环境变量来避免在 database.yml 中硬编码 postgresql 的用户名和密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40402016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com