Ruby on Rails
Friday, June 14, 2019
In the mean time you can add a rake task to the lib folder to rename credentials, or a bash/Ruby script to the bin folder:
Given: development.yml.enc, test.yml.enc, production.yml.enc
lib/tasks/credentials.rake
namespace : credentials do
namespace :set_env do
task production: : environment do
Rake::Task['credentials:set_env'].invoke('production')
end
task test: : environment do
Rake::Task['credentials:set_env'].invoke('test')
end
task development: : environment do
Rake::Task['credentials:set_env'].invoke('development')
end
end
task :set_env, [ :env_name ] => : environment do |_, args|
File.open(Rails.root.join('config', 'credentials.yml.enc'), 'w') do |f|
f.write(File.read(Rails.root.join('config', "#{args[:env_name]}.ym.enc")))
end
end
end
For something dynamic you could do
namespace : credentials do
namespace :set_env do
Dir['config/*.yml.enc'].each do |path|
f_name = path[/(\w+)\.yml\.enc$/, 1].to_sym
next if f_name == :credentials
task f_name => : environment do
File.open(Rails.root.join('config', 'credentials.yml.enc'), 'w') do |f|
f.write(File.read(path))
end
end
end
end
I think this solution seems the most Rails 5.2 friendly, but ideally isn't the perfect solution as ideally you could in fact (one day, in Rails 6, say), separate the 3 files themselves, so you could, say, give junior developers access to only development+staging credentials by giving the only the keys for the development + staging master keys (but continuing to check-in all 3 .yml.enc files into source-code. the 3 keys are of course, not checked-in)--But if you have a team where you don't care if all the devs have the same (full) credentials then I like this solution best.-JasonOn Jun 10, 2019, at 8:40 PM, Sampson Crowley <sampsonsprojects@gmail.com> wrote:for rails 5, just nest environment specific credentials under a key for said environmentthen all you have to do when accessing said config is add the environment to the party that pulls in config, e.g.:credentials.yml.enc:
main_key:
development:
sub_key:
value_key: 'development'
production:
sub_key:
value_key: 'production'
test:
sub_key:
value_key: 'test'code:
my_credential = Rails.application.credentials.dig(:main_key, Rails.env.to_sym, :sub_key, :value_key)```
On Sunday, June 9, 2019 at 7:40:05 PM UTC-6, Jason Fleetwood-Boldt wrote:In some apps I've worked on Rails 5.1 and prior, environment variables, saved directly into the source code.In rails 5.2 Custom credentials encourages us to check-in only the encrypted version of our configuration, and keep our master.key keyfile outside of our repository.My question is this: Is there a way to segregate by environment? (i.e., development, staging, production?)seems like the instructions for setting up AWS keys, for example, would have the dev, staging + production all pointing to & using the same AWS bucket, access key, and secret. But it seems like for many services I'd want to have different credentials for different environments.I found this SO post that discusses this question, but unfortunately it doesn't present a very good answer IMHO because the there are only two answers: 1) I don't quite understand and 2) a suggestion to basically check all your ENV variables against each of your environments, which seems like it could encourage a messy setup. I much like answer #1 from this SO post, but I don't understand how to implement it practically.any tip appreciated.Thanks,Jason--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/01fa12ca-06f5-4246-bead-503af4bf1a5c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/C2DFCFDD-69CD-4A7C-A7C3-1898210E9B42%40datatravels.com.
For more options, visit https://groups.google.com/d/optout.
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/CAM5L8qPewQYZU0qK4%2BmUYx3SU4DFtAzrCdbuQmbL02G6JFdHew%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment