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