2011-12-31 19 views
61

benim development.yml dosyanın aşağıdaki gelişimini bölümü var: Ben bundle exec rails console aracılığı ile raylar konsolu açıp ENV['APP_USER_POSTGRES_PASSWORD'] yazdığınızdadatabase.yml` dosyanın `içindeki ortam değişkenleri erişmek için başarısız

development: 
    adapter: postgresql 
    host: localhost 
    database: testtb 
    username: app_user 
    password: ENV['APP_USER_POSTGRES_PASSWORD']  <= Troublesome line 

geri DB şifre almak Yerel profilimde belirttim. Benim raylar sunucuyu başlattığınızda Ancak, ben DB şifre aslında oldukça erişmeye çalışmak yerine, düz metin olarak dışarı daktilo vardı, bu daha önce çalışıyordu

PGError FATAL: password authentication failed for user "app_user" 

ile başarısız DB bağlanamıyorum ENV['...'] aracılığıyla, ancak açık nedenlerle, gerçek şifreyi bu dosyadan tamamen (ve dolayısıyla kod deposu dışında) tutmak istiyorum, buna rağmen database.yml dosyasına diğer, güvenli olmayan değişiklikleri yapabilmekteyim.

Ben özlüyorum sözdizimi hakkında özel bir şey var mı, yoksa database.yml dosya yüklenirken zaman mevcut değil nedense ortam değişkenleri var?

+0

Sen kontrol etmek isteyebilirsiniz Yapılandırma ve yerel değişkenler hakkında bu kılavuzun dışında: http://railsapps.github.io/rails-environment-variables.html tl; dnr: figaro gem bunun için yararlı olabilir. – Antzi

+0

@Antzi Figaro'nun README'ye göre, Figaro'nun figaro konfigürasyonundan önce okuduğu gibi database.yml'i desteklemediğini unutmayın. – mahemoff

+0

Güncelleme: Figaro tüm Rails sürümlerinde database.yml için çalışıyor. https: // github.com/laserlemon/figaro/çekin/100 – mahemoff

cevap

162

Güncelleme: Bazı kişiler, bunun Raylar 4.2.x.x. Kendimi denemedim, bu yüzden YMMV.


Ah nihayet basit bir çözüm anladım - bu Ruby gömülü kabul eder:

password: <%= ENV['APP_USER_POSTGRES_PASSWORD'] %> 
+0

Harika yakalama! Kesinlikle çalışır. Figaro, doktorlarını sizin adınıza güncellemelidir. – rcd

+5

isa christ, bu kontrol için ne kadar zaman geçirdiğimi ve şifremi iki kez kontrol ettiğimi bilmiyorsun. Teşekkürler! Sanırım YAML'nin işaretleme dili değil, erb olduğunu hatırlamalıyım. –

+1

@ MikeH-R - Sonunda bunu anladığımda hissettiğim tam olarak böyle bir şey. – jefflunt

16
daha yeni bir Raylar sürümünü çalıştırıyorsanız

Kısa ve hızlı çözüm! Aşağıdaki komutu çalıştırın:

spring stop 

ozaman koşmak rails console veya diğer raylar komutunu. Sorunum, yeni ENV varsmı yenilemek/almak için Spring sunucusunun yeniden başlatılması gerektiğiydi. Rails konsolunu başlatıyordum ve baharı kapatana kadar onları göremedim.

Rails'in önceki sürümleri, Spring sunucusunu kullanmadıkları için bu sorunu yaşamadı.

Sorun gidermenize yardımcı olacak başka bir araç - database.yml yapılandırmanızı yazdırmak için aşağıdaki komutu kullanın. Komut satırından çalıştırabilirsiniz, ama sonra oldukça bunu yapmak için awesome_print kullanabilirsiniz beri Raylar konsolda içinde bu koşmayı tercih:

rails console içinde:

puts ActiveRecord::Base.configurations 

... ya awesome_print

kullanarak
ap ActiveRecord::Base.configurations 

Veya bunun yerine komut satırından:

bin/rails runner 'puts ActiveRecord::Base.configurations' 
+2

yardımcı olması durumunda aşağıya bakın. Mükemmel bir şekilde geçerli (ve benim için de çalıştı) +1 – Kroltan

+0

teşekkürler @Kroltan, insanların bazen başkalarına yardımcı olan değerli bir soruyu nasıl reddedeceğini ve neden bir neden sağlamadığını oldukça can sıkıcı bir durum. hainler sanırım nefret ederler. ama bunun size yardımcı olmasına sevindim. – FireDragon

+2

Her iki rayda da konsol ve ray rayları ile ilgili sorunlar vardı ve hepsi yeni env değişkenlerini almak için gerekli olan bu bahar sıfırlama nedeniyle oldu! Teşekkürler ;) – VAShhh

İlgili konular