2016-11-03 27 views
4

我创建了一个名为sample_app的新Rails应用程序,并使用postgresql作为我的数据库(我已经创建了postgresql用户名和密码)。我用这个设置指南https://gorails.com/setup/ubuntu/16.04如何使用环境变量避免在database.yml中对postgresql的用户名和密码进行硬编码?

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

我发现从数字海洋这个教程,建议使用:

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

这是正确的代码?如果是这样,因为我的应用程序被称为sample_app,我的代码应该是?

username: <%= ENV['SAMPLE_APP_DATABASE_USER'] %> 
password: <%= ENV['SAMPLE_APP_DATABASE_PASSWORD'] %> 

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

+1

您可以采取的任何名称这些变量是出口, – Sravan

+0

你能expland?我不明白你的意思,我真的是一个新手。 – boholdyjeramae

+0

添加了关于如何设置环境变量的答案。请检查一次。 – Sravan

回答

6

有许多方法可以设置环境变量。

这里有两个人,

方案一:设置通过YML文件

ENV变量创建一个文件config/local_env.yml

配置/ local_env.yml:

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

以上是您将使用的名称lik e,ENV['SAMPLE_APP_DATABASE_USER']这些可以作为你的愿望。你可以采取任何名称,但我们应该在ENV参考中使用相同的名称。

将它添加到gitignore:在

/config/local_env.yml

改变一些代码application.rb

application.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 

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

使用环境变量:

username: <%= ENV['SAMPLE_APP_DATABASE_USER'] %> 
password: <%= ENV['SAMPLE_APP_DATABASE_PASSWORD'] %> 

方案二:使用费加罗宝石

宝石需要的Ruby的设置环境变量的能力优势,以及阅读。该gem读取config/application.yml文件,并在Rails应用程序中配置任何其他内容之前设置环境变量。

以下是如何使用它。在你的Gemfile,添加:

gem 'figaro'

和运行bundle install

创业板提供了一个发电机:

$ 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.

+0

我试过'<%= ENV ['SAMPLE_APP_USERNAME']%>'而不创建另一个文件并且完美地工作。也许这意味着我正确地遵循了设置指南。为了检查,我试图硬编码我的用户名,它运行。尝试使用错误的用户名,它未能运行。试过env变量,它运行。 – boholdyjeramae

+0

你使用unix吗? – Sravan

+0

我使用的是Ubuntu 16.04。我只是遵循Ubuntu 16.04的gorails设置指南,并遵循你的建议,我可以将它命名为任何东西,它的工作原理。 – boholdyjeramae

3

你可以称它为任何你想要的......

username: <%= ENV['CARROTS'] %> 
password: <%= ENV['BEANS'] %> 

你只需要确保你的部署脚本正确设置变量胡萝卜和豆类。

+0

什么是部署脚本?对不起,我真的是新手。我只是按照此链接上的设置指南https://gorails.com/setup/ubuntu/16.04 – boholdyjeramae

+0

您需要谷歌部署脚本...这就是您将代码部署到生产环境的方式。 – SteveTurczyn

+0

如何使用Git和Capistrano部署Rails 4应用程序// Rob McLarty – SteveTurczyn

1

试试这个g EM dotenv-rails

其添加到Gemfile中:

gem 'dotenv-rails', :groups => [:development, :test] 

捆绑它。现在在你的应用程序的目录中的文件.env与以下内容:

SAMPLE_APP_DATABASE_USER: "devuser" 
SAMPLE_APP_DATABASE_PASSWORD: "devuser" 

重启你去好服务器。当你启动应用程序,你可以在你的database.yml文件访问

username: <%= ENV['SAMPLE_APP_DATABASE_USER'] %> 
password: <%= ENV['SAMPLE_APP_DATABASE_PASSWORD'] %> 

阅读dotenv-rails documentation更多信息

相关问题