Hassas bilgileri (hesap kimlik bilgileri, parolalar vb.) Asla kodlamayın . Bunun yerine, bu bilgileri ortam değişkenleri (anahtar / değer çiftleri) olarak depolamak için bir dosya oluşturun ve bu dosyayı kaynak kodu yönetim sisteminizden hariç tutun. Örneğin, Git (kaynak kodu yönetim sistemi) açısından, bu dosyayı ekleyerek hariç tutun. gitignore :
-bash> echo '/config/app_environment_variables.rb' >> .gitignore
/config/app_environment_variables.rb
ENV['HTTP_USER'] = 'devuser'
ENV['HTTP_PASS'] = 'devpass'
Ayrıca /config/environment.rb
, require
çizgi ile çizgi arasına aşağıdaki satırları ekleyin Application.initialize
:
app_environment_variables = File.join(Rails.root, 'config', 'app_environment_variables.rb')
load(app_environment_variables) if File.exists?(app_environment_variables)
Bu kadar!
Yukarıdaki yorumun dediği gibi, bunu yaparak ortam değişkenlerinizi daha önce yükleyeceksiniz environments/*.rb
, bu da bu dosyaların içindeki değişkenlerinize başvurabileceğiniz anlamına gelir (örn. environments/production.rb
). Bu, ortam değişkenleri dosyanızı içine koymaya göre büyük bir avantajdır /config/initializers/
.
İçinde app_environment_variables.rb
, geliştirme veya üretim açısından ortamları ayırt etmeye gerek yoktur çünkü bu dosyayı asla kaynak kodu yönetim sisteminize kaydetmeyeceksiniz, bu nedenle varsayılan olarak geliştirme bağlamı içindir. Ancak, test ortamı için (veya üretim modunu yerel olarak test ettiğiniz durumlar için) özel bir şey ayarlamanız gerekirse , diğer tüm değişkenlerin altına bir koşullu blok eklemeniz yeterlidir :
if Rails.env.test?
ENV['HTTP_USER'] = 'testuser'
ENV['HTTP_PASS'] = 'testpass'
end
if Rails.env.production?
ENV['HTTP_USER'] = 'produser'
ENV['HTTP_PASS'] = 'prodpass'
end
Her güncelleme yaptığınızda app_environment_variables.rb
, uygulama sunucusunu yeniden başlatın. Apache / Passenger veya rails server
:
-bash> touch tmp/restart.txt
Kodunuzda, aşağıdaki gibi ortam değişkenlerine bakın:
def authenticate
authenticate_or_request_with_http_basic do |username, password|
username == ENV['HTTP_USER'] && password == ENV['HTTP_PASS']
end
end
İçlerindeki Not app_environment_variables.rb
belirtmelisiniz Boolean ve sayılar olarak dizeleri (örneğin ENV['SEND_MAIL'] = 'false'
sadece false
ve ENV['TIMEOUT'] = '30'
sadece 30
,) aksi takdirde hatası alacağını can't convert false into String
ve can't convert Fixnum into String
sırasıyla.
Hassas bilgileri saklama ve paylaşma
Bağlanması gereken son düğüm şudur: Bu hassas bilgileri müşterilerinizle ve / veya ortaklarınızla nasıl paylaşabilirsiniz? İş sürekliliği amacıyla (yani düşen bir yıldız tarafından vurulduğunuzda, müşterileriniz ve / veya ortaklarınız sitenin tüm işlemlerine nasıl devam edecek?), Müşterilerinizin ve / veya ortaklarınızın uygulamanızın gerektirdiği tüm kimlik bilgilerini bilmesi gerekir. . Bunları e-postayla göndermek / Skyping yapmak güvensizdir ve kargaşaya yol açar. Paylaşılan Google Dokümanlarında saklamak fena değildir (herkes https kullanıyorsa), ancak şifreler gibi küçük başlıkları depolamaya ve paylaşmaya adanmış bir uygulama ideal olacaktır.
Heroku'da ortam değişkenleri nasıl ayarlanır?
Heroku'da tek bir ortamınız varsa:
-bash> heroku config:add HTTP_USER='herouser'
-bash> heroku config:add HTTP_USER='heropass'
Eğer varsa çoklu ortamları Heroku tarih:
-bash> heroku config:add HTTP_USER='staguser' --remote staging
-bash> heroku config:add HTTP_PASS='stagpass' --remote staging
-bash> heroku config:add HTTP_USER='produser' --remote production
-bash> heroku config:add HTTP_PASS='prodpass' --remote production
Foreman ve .env
Birçok geliştirici , uygulamalarını yerel olarak çalıştırmak için (Apache / Passenger veya benzerlerini kullanmak yerine ) Foreman'ı ( Heroku Araç Kemeri ile yüklenir ) kullanır . Foreman ve Heroku , uygulamanız tarafından hangi komutların çalıştırıldığını bildirmek için kullanır , bu nedenle yerel geliştiriciden Heroku'ya geçiş bu açıdan sorunsuzdur. Her Rails projesinde Foreman ve Heroku kullanıyorum, bu yüzden bu kolaylık harika. Ama olay şu ki .. Foreman , dotenv aracılığıyla depolanan ortam değişkenlerini yükler, ancak ne yazık ki dotenv, esasen dosyayı çiftler için ayrıştırırrails server
Procfile
/.env
key=value
; bu çiftler tam orada değişkenler haline gelmezler, bu nedenle önceden ayarlanmış değişkenlere (şeyleri KURU tutmak için) başvuramazsınız veya orada "Ruby" yapamazsınız (yukarıda koşullarla belirtildiği gibi), bunu yapabilirsiniz yapmak /config/app_environment_variables.rb
. Örneğin, kuru tutma açısından bazen şöyle şeyler yapıyorum:
ENV['SUPPORT_EMAIL']='Company Support <support@company.com>'
ENV['MAILER_DEFAULT_FROM'] = ENV['SUPPORT_EMAIL']
ENV['MAILER_DEFAULT_TO'] = ENV['SUPPORT_EMAIL']
Bu nedenle, uygulamalarımı yerel olarak çalıştırmak için Foreman kullanıyorum, ancak .env
dosyasını ortam değişkenlerini yüklemek için kullanmıyorum ; daha ziyade Foreman'ı /config/app_environment_variables.rb
yukarıda açıklanan yaklaşımla birlikte kullanıyorum .
export admin_password="secret"
unutmayınexport admin_password = "secret"
.