如何在Rails 5.2中管理不同环境的凭证?

时间:2018-12-05 23:05:37

标签: amazon-s3 environment-variables credentials ruby-on-rails-5.2

我(仍然/始终)是Rails的新手。在构建项目时,Rails已使用encrypted credentials升级到v5.2。现在,我要部署到生产环境,发现我不了解如何将生产凭证与开发区分开。而且我不确定我是否会在v5.1中做到这一点。那么如何在Rails 5.2中做到这一点?

5 个答案:

答案 0 :(得分:3)

使用此代码已解决了我的问题

如果在这样的凭据文件中

<div class="form-style-1">
	<h1>Travel Registration Form</h1>
	<form action="" method="POST">
		<input name="orgid" type="hidden" value="00D8E000000DW9t" /> <input name="retURL" type="hidden" value="http://" />
		<fieldset>
		
			<h3>
				Select Travel</h3>
			<input class="form__input form__input--checkbox" data-input="00N8E000002AjRq" id="flight" type="checkbox" />
			<label class="form__field form__field--checkbox" for="flight"> <span class="form__label">Flight</span> 
			</label> 
			<input class="form__input form__input--checkbox" id="hotel" type="checkbox" /> 
			<label class="form__field form__field--checkbox" for="hotel"> <span class="form__label">Hotel</span> </label>
			
			<input class="form__input form__input--checkbox" id="transfer" type="checkbox" /> 
			<label class="form__field form__field--checkbox" for="transfer"> <span class="form__label">Transfer </span> 
			</label>
			
			<!--Above is the checkboxes code -->
			
			
			<p class="form__field form__field--text" data-conditional="flight hotel travel">
				<span class="form__input">Traveler's Information </span></p>
				
				
				
			<label class="form__field form__field--text" data-conditional="flight hotel travel" for="name"><span class="form__label">Traveler Name </span><input class="form__input" id="name" maxlength="80" name="name" size="20" type="text" /> </label><br>
			
			<label class="form__field form__field--text" data-conditional="flight hotel travel" for="email">Email<input class="form__input" id="email" maxlength="80" name="email"  size="20" type="text" /></label><br /> 
			
			<label class="form__field form__field--text" data-conditional="flight hotel travel" for="phone">Phone<input class="form__input" id="phone" maxlength="40" name="phone" size="20" type="text" /></label><br />
			
			<label class="form__field form__field--text" data-conditional="flight hotel travel" for="subject">Subject<input class="form__input" id="subject" maxlength="80" name="subject" size="20" type="text" /></label><br />
			
			<label class="form__field form__field--text" data-conditional="flight hotel travel" for="description">Description<textarea class="form__input" name="description"></textarea></label><br />

第一个解决方案:

development: stripe_secret_key: 123 production: stripe_secret_key: 345 test: stripe_secret_key: 678

第二个解决方案:

打开Rails.application.credentials[Rails.env.to_sym][:stripe_secret_key]文件并定义application.rb方法

self.credentials

并使用

module ModuleName class Application < Rails::Application def self.credentials @credentials ||= Rails.application.credentials[Rails.env.to_sym] end end end

更多信息,请参阅link

答案 1 :(得分:2)

我发现rails-env-credentials宝石对此有用。不确定它将与即将提供的Rails 6支持如何兼容,但是对于我的应用程序来说效果很好。

答案 2 :(得分:1)

我相信您的想法不是在凭证文件中具有多个环境,而是在多个凭证文件中。

我们通过使用credentials.dev.enccredentials.production.enc等来解决此问题。

然后,作为部署过程的一部分,我们将特定文件上传到特定服务器。

这还使您的环境具有独立的主密钥和加密密钥,从而降低了系统的安全风险。

答案 3 :(得分:0)

@dhh和@morgoth promise to add environment management to Rails 6时,我以这种方式解决了我的任务,并且看起来一切正常:

# application.rb
class Application < Rails::Application
    if Rails.env.development?
        ENV["access_key_id"] = Rails.application.credentials.DEV_aws[:access_key_id]
        ENV["secret_access_key"] = Rails.application.credentials.DEV_aws[:secret_access_key]
        ENV["s3_bucket_name"] = Rails.application.credentials.DEV_aws[:s3_bucket_name]
    end
    if Rails.env.production?
        ENV["access_key_id"] = Rails.application.credentials.PROD_aws[:access_key_id]
        ***
    end
end

所有内容都就位并加密

答案 4 :(得分:0)

Sampson Crowley在Rails对话列表上:

对于rails 5,只需将特定于环境的凭据嵌套在所述环境的密钥下

然后,在访问所述配置时,您要做的就是将环境添加到拉入配置的一方,例如:

credentials.yml.enc:

main_key:   发展:     sub_key:       value_key:“开发”   生产:     sub_key:       value_key:“生产”   测试:     sub_key:       value_key:“测试”

代码:

my_credential = Rails.application.credentials.dig(:main_key, Rails.env.to_sym, :sub_key, :value_key)