2016-03-22 22 views
0

göremiyorum:tırmık Kısacası Rails.application.secrets

  1. o tırmık config/database.yml dosyası
  2. sonra config/secrets.yml amacı nedir içinde Rails.application.secrets erişimi görünüyor değil mi? Uzun yılında

: Ben config/database.yml uygun değerleri belirtilen ve bağlantı kullanıcının kök 'olmamalıdır olsa

RAILS_ENV=production rake db:migrate 

ben hata Mysql2::Error: Access denied for user 'root'@'localhost' (using password: NO) olsun çalıştırmak

. Bu, ilgili yapılandırma dosyalarından bir alıntıdır:

# config/database.yml 
production: 
    <<: *default 
    adapter: mysql2 
    host: localhost 
    database: <%= Rails.application.secrets[:database][:name] %> 
    username: <%= Rails.application.secrets[:database][:username] %> 
    password: <%= Rails.application.secrets[:database][:password] %> 

# config/secrets.yml 
production: 
    secret_key_base: very-long-blah-blah-blah 
    database: 
    name: app_db_name 
    username: app_db_user 
    password: app_db_password 

rakeRails.application.secrets erişimi yok gibi görünüyor. göç Koşu açıkça örneğin database.yml gerekli değerleri koyduğunuzda şu şekilde başarılı olur:

production: 
    <<: *default 
    adapter: mysql2 
    host: localhost 
    database: <%= Rails.application.secrets[:database][:name] || 'app_db_name' %> 
    username: <%= Rails.application.secrets[:database][:username] || 'app_db_user' %> 
    password: <%= Rails.application.secrets[:database][:password] || 'app_db_password' %> 

yukarıda Rails.application.secrets[:database][:name] hiçbir şey giderir kanıtlıyor.

rake içinde Rails.application.secrets'a nasıl erişebilirim? Bu doğru çözüm mü?

config/database.yml'un gizli bölümlerini doldurmak için ENV[VARNAME] kullanabileceğimi biliyorum. Peki o zaman config/secrets.yml dosyasının amacı nedir?

Ayrıca, Yolcu kullandım, yani .bashrc'daki değişkenlerin web sunucusuna erişemeyeceği anlamına gelir (Bu sorunu secret_key_base ile yapmıştım). Bu nedenle, ortam değişkenini kullanmaktan kaçınmaya çalışıyorum. Sadece tüm sırlarımın sunucunun her yerine yayılmasını istemiyorum. Eğer var gibi

raylar-4.2.2, Ubuntu LTS 14.04

+0

sadece ince olmalıdır. Üretim yapılandırmanız sunucuda neye benziyor? Heroku kullanmadığını biliyorum ama 'heroku config' çalıştırmanın karşılığı nedir? – toddmetheny

+0

Yolcu, ''bashrc' –

+0

@toddmetheny'de ayarlanan ortam değişkenleriyle ilgili bir soruna sahip değil, 'localhost'un bulunmasıyla ilgili sorun nedir? uygulama ve veritabanı, kayıt sunucusunda çalışıyor ve benim anlayışımla, uygulamanın mysql soketini kullanarak 'app_db_user' @ 'localhost' olarak veritabanına bağlanmasına izin veriliyor. –

cevap

1

Ben de release notes bu tür yok, secrets.yml için böyle iç içe içerik görmedik. Bu sorunun bütünüdür ama localhostla ayarlanmış üretim ev sahibi olması sanma aşağıdaki kodu

# config/secrets.yml 
production: 
    secret_key_base: very-long-blah-blah-blah 
    name: app_db_name 
    username: app_db_user 
    password: app_db_password 

ile Ve database.yml

# config/database.yml 
production: 
    <<: *default 
    adapter: mysql2 
    host: localhost 
    database: <%= Rails.application.secrets.name %> 
    username: <%= Rails.application.secrets.username %> 
    password: <%= Rails.application.secrets.password %> 
+1

teşekkür ederiz. Bu çalışır ve daha basit görünüyor.Ben internette bulunan someones tarifi aşağıdaki fiyatını ödüyorum :( –

+0

Ben bu hata atar. Bu hata atar 'active_record/connection_adapters/_adapter' yüklenemedi. database.yml geçerli, 'mysql2', 'postgresql' veya 'sqlite3' dışındaki bir adaptör kullanıyorsanız, Gemfile'a gereken adaptör gemini ekleyin. (LoadError) –