Başlatıcıları diğer yanıtlar gibi kullanabilirsiniz, ancak geleneksel Rails 4.1+ yolu config/secrets.yml
. Rails ekibinin bunu tanıtmasının nedeni bu cevabın kapsamı dışındadır, ancak TL; DR, secret_token.rb
token kaynak kontrol geçmişine ve ihtiyaç duyulan tek sisteme kontrol edildiğinden, bir güvenlik riski olmanın yanı sıra konfigürasyon ve kodu da birleştirir. üretim gizli belirtecinin üretim altyapısı olduğunu bilir.
Bu dosyayı , kaynak denetimine .gitignore
eklemeyeceğiniz gibi eklemelisiniz config/database.yml
.
Kurma Heroku kendi kodunu referans config/database.yml
gelen DATABASE_URL
kendi içinde Ruby Buildpack , ben bitti onların repo bölmek ve oluşturmak için modifiye config/secrets.yml
gelen SECRETS_KEY_BASE
ortam değişkeni.
Bu özellik Rails 4.1'de tanıtıldığından, ./lib/language_pack/rails41.rb
bu işlevselliği düzenlemenin ve eklemenin uygun olduğunu hissettim .
Şirketimde oluşturduğum değiştirilmiş yapı paketindeki snippet :
class LanguagePack::Rails41 < LanguagePack::Rails4
# ...
def compile
instrument "rails41.compile" do
super
allow_git do
create_secrets_yml
end
end
end
# ...
# writes ERB based secrets.yml for Rails 4.1+
def create_secrets_yml
instrument 'ruby.create_secrets_yml' do
log("create_secrets_yml") do
return unless File.directory?("config")
topic("Writing config/secrets.yml to read from SECRET_KEY_BASE")
File.open("config/secrets.yml", "w") do |file|
file.puts <<-SECRETS_YML
<%
raise "No RACK_ENV or RAILS_ENV found" unless ENV["RAILS_ENV"] || ENV["RACK_ENV"]
%>
<%= ENV["RAILS_ENV"] || ENV["RACK_ENV"] %>:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
SECRETS_YML
end
end
end
end
# ...
end
Elbette bu kodu, ortam değişkeninizden okunacak diğer sırları (örn. Üçüncü taraf API anahtarları, vb.) Eklemek için genişletebilirsiniz:
...
<%= ENV["RAILS_ENV"] || ENV["RACK_ENV"] %>:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
third_party_api_key: <%= ENV["THIRD_PARTY_API"] %>
Bu şekilde, bu sırra çok standart bir şekilde erişebilirsiniz:
Rails.application.secrets.third_party_api_key
Uygulamanızı yeniden konuşlandırmadan önce ortam değişkeninizi ayarladığınızdan emin olun:
Ardından, değiştirilmiş derleme paketinizi (veya benimkine bağlanmaktan daha fazlası) Heroku uygulamanıza ekleyin (Heroku'nun belgelerine bakın) ) ve uygulamanızı yeniden konuşlandırın.
Buildpack, Heroku'ya config/secrets.yml
her gittiğinizde dyno oluşturma işleminin bir parçası olarak ortam değişkeninizden otomatik olarak oluşturur git push
.
EDIT: Heroku'nun kendi belgelericonfig/secrets.yml
, ortam değişkeninden okumak için oluşturmayı önerir , ancak bu, bu dosyayı kaynak denetiminde denetlemeniz gerektiği anlamına gelir. Benim durumumda, kontrol etmek istemediğim geliştirme ve test ortamları için sabit kodlu sırlarım olduğundan bu iyi çalışmıyor.