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.rbtoken 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 .gitignoreeklemeyeceğiniz gibi eklemelisiniz config/database.yml.
Kurma Heroku kendi kodunu referans config/database.ymlgelen DATABASE_URLkendi içinde Ruby Buildpack , ben bitti onların repo bölmek ve oluşturmak için modifiye config/secrets.ymlgelen SECRETS_KEY_BASEortam değişkeni.
Bu özellik Rails 4.1'de tanıtıldığından, ./lib/language_pack/rails41.rbbu 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.ymlher 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.