Geliştirme Gizli Anahtarı ayarlanmadı


99

Yönetimin arka ucu için Active Admin gemini kullanarak bir Rails 4 uygulaması geliştiriyorum. Active Admin, kullanıcı kimlik doğrulaması için Devise'ı kullanır. Şimdi, uygulamayı capistranoVPS sunucusunda kullanarak dağıtmaya çalıştığımda , aşağıdaki hatayı alıyorum:

rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:
config.secret_key = '-- secret key --'

Bir Google araması bu hata için pek bir şey yapmaz. Neden bir hata verdiğine dair herhangi bir öneriniz var mı? Bu devisetür bir yapılandırma anahtarını yerleştirmek için herhangi bir yer bulamadığımdan, başlatıcıya gizli anahtarı eklemeli miyim initializers/devise.rb?


@mrbrdo evet, mesaj tam olarak neyin eksik olduğunu söyler, ancak devise.rb dosyasını açtığınızda hakkında herhangi bir belge yoktur secret key. Ayrıca yeni bir kurulum çalıştırıyorsanız, uygulama bununla ilgilenmelidir. Github.com/plataformatec/devise/issues/2554 adresindeki bilet sayesinde çözüldü.

Yanıtlar:


87

bundle updateBu sabah koştum ve aynı hatayı almaya başladım.

Bunu bir satır olarak ekledim config/initializers/devise.rbve hata düzeltildi.

Bu, onu tanıtan taahhüt gibi görünüyor .


24
Geleceğin Google Çalışanları, 2014-07-08 itibariyle, yapılandırma boyunca sırların yayılmasını önlemek için stackoverflow.com/questions/18080910/… Rails 4+ için daha doğru yanıttır.
Zachary Moshansky

3
2015-10-30 itibarıyla, stackoverflow.com/a/32525855/1842747 en iyi yanıttır, ancak "gizli anahtarınızı" unutmamak için SECRET_KEY_BASEortam değişkenini kopyalamak yerine doğrudan ayarlamanızı şiddetle tavsiye ederim. secrets.ymlyeterince sır değil!
monozok

38

Benim için Rails 4.1 ve Devise 3.2.4'te işe yarayanlar şunlar config/initializers/devise.rb:

config.secret_key = ENV['DEVISE_SECRET_KEY'] if Rails.env.production?

Veya figaromücevher kullanırsanız :config.secret_key = Figaro.env.devise_secret_key if Rails.env.production?
Alexander

33

İtibariyle hazırlamak 3.2.3 anahtarı ayar konumu varsayılan Rails 4+ uygulamalar için YourAppName :: Application.config.secret_key_base bulundu config / ilklendiriciler / secret_token.rb


2
Ah bilmek güzel. Açık kaynak kodlu bir uygulama için Devise gizli anahtarının kaynakta düz metinde bir yerde durmasının Çok Kötü Bir Şey olduğunu anlıyorum, değil mi? En azından bu varsayılan, daha az yerde dinamik gizli anahtarlar ayarlamamıza izin verir.
Topher Hunt

4
Profesyonel olmayanlar için birisi bu bilgilerle ne yapılacağını açıklayabilir mi? Teşekkürler!
ahnbizcad

2
Uygulamamda o dosyayı görmüyorum. Bu, rails g tasar: yükleme başarılı bir şekilde çalışmadı anlamına mı geliyor? Yoksa bu cevap zaten modası geçmiş mi?
ahnbizcad

10
Modası geçmiş. secret_token.rb, config / secrets.yml ile değiştirilen Rails 4 ile stokta gelmez ( daha fazla bilgi için buraya bakın ). Biraz konu dışı, ancak Rails tarafından oluşturulan yorumlarda söylendiği gibi .gitignore dosyanıza config / secrets.yml eklemeyi unutmayın. Nasıl olduğunu öğrenmek için buraya gidin .
brntsllvn

12

Bu benim sorunumu çözdü:

Aşağıdaki kodu config / initializers / devise.rb dosyanıza ekleyin .

config.secret_key = '-- secret key --' 

'- gizli anahtar -' yerine kendi anahtarınızı yazın. Güvenlik amacıyla bir ENV değişkeninde saklamanızı öneririm.


2
Bunu nasıl \ nerede yaparsınız ve onları nasıl bağlarsınız?
ahnbizcad

3
^ bunun cevabı figaro mücevherini kullanmaktır. github.com/laserlemon/figaro Tüm gerçek anahtarlarınızı bir config / application.ymlfile dosyasına koyarsınız, gizli kalmaları için gitignore eder ve uygulamanızın başka bir yerinde onlara referans verirsiniz ENV["your_particular_secret_key_name"]. Ardından, uygulamanız anahtarlarınıza dinamik olarak başvurur. Ama anahtarlarınızı işaretlediniz, peki onları üretim ortamınıza nasıl aktaracaksınız? Figaro kullanarak bunları doğrudan yerel geliştirme ortamınızdan heroku'ya aktarırsınız ve gizli anahtarlarınız heroku'da ortam değişkenleri olarak sona erer
ahnbizcad

12

Gereğince değişmek :

Devise, secret_key_base on Rails 4+ uygulamalarını kendi gizli anahtarı olarak kullanacaktır. Devise.rb başlatıcısını değiştirerek bunu değiştirebilir ve kendi sırrınızı kullanabilirsiniz.

Gittiğim config/secrets.ymlve değiştirilen productiondeğer.

Önce:

production: 
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

Sonra:

production: 
  secret_key_base: string of charaters

Elbette, bu daha sonra ayarlayacağım ortam değişkenine ayarlanmalıdır, ancak bu en azından onu çalıştırdı. İpimi kullanarak aldım bundle exec rake secret.


11
Bu bir anti-modeldir. Lütfen üretim gizli anahtarınızı kontrol etmeyin.
Zack Brown

10

Kaçmamış olman olabilir rails g devise:installmi?

rails generate devise UserÖnceki komut olmadan çalıştırmak bu soruna neden olur.


1
Bu benim sorunum ama nasıl düzelteceksin ...?
C404

Kullanıcı oluşturduktan sonra "rails g devise: install" programını yeniden çalıştırmak mümkün olmalıdır. Git kullanıyorsanız, test şubesi yapın ve deneyin. Değilse, projenizin bir kopyası üzerinde deneyin.
sascha.daniels

Benim sorunum buydu. Uygulamayı sildim (pek bir şey yapmadım) ve rails g devise userkullanıcı tablosunu oluşturup taşımayı denemeden önce yaptım . Bu sorunu çözdü.
Matt

bu benim için aynı sorunu Rails 5.0.0.beta4 & Devise 4.1.1 ile çözdü ama neden olduğundan emin değilim. Bir fark çalıştırdım ve farklı bir gizli anahtardan ayrı olarak, devise.rb'de değişen tek satır + 102 idi: "config.stretches = Rails.env.test?? 1: 11"
Cleverlemming

10

In config/initializers/devise.rbI koyun:

config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?

Çünkü koyarsanız:

$ heroku config

secret_key_baseMod için bir göreceksiniz production.


2
Sanırım bu cevapta büyük bir güvenlik sorunu var. Cevabın önerdiği gibi tek tırnak işaretlerini '<% = ENV ["SECRET_KEY_BASE"]%>' arasına koyarsanız, enterpolasyonlu gizli anahtar tabanını elde etmek yerine tam karakter dizisini elde edeceğinizi düşünüyorum. Başka bir deyişle, kelimenin tam anlamıyla ENV ["SECRET_KEY_BASE"] yazıyor, değil mi?
user1515295

Netleştirmek için çift tırnak kullanın: "<% = ENV [" SECRET_KEY_BASE "]%>"
user1515295

3
devise.rb bir ruby ​​dosyasıdır, bir erb dosyası değildir. <% = Sözdizimine gerek yok. Config.secret_key = ENV ["SECRET_KEY_BASE"] kullanın
John Hinnegan

6

Başlatıcı sorunumu şu çirkin yaklaşımla çözüyorum:

config.secret_key = 'some1234keyq23' if Rails.env == 'production'

config / initializers / devise.rb'de artık üretimde ve geliştirmede çalışıyor!


6

Depomu git'ten yeni bir makineye klonladım.

config/secrets.yml 

dosya .gitignore listemdeydi, bu nedenle bu dosya mevcut değildi ve Devise dosyayı oluşturmaz.

Dosyayı ekledim, sonra yeniden çalıştırdım

rails generate devise MODEL

ve işe yaradı.


1
BU. Github o ekleyerek faydalı olmak sandım secrets.ymlbenim için .gitignoredosyanın. Tam bir okuma yapmadım ve oluşturulan Rails .gitignoredosyasından çok daha fazlasını içermesinden belli belirsiz etkilendim . : facepalm:
steve

Evet, sorunum buydu. Eski bir git commit'e geri döndüm ve secrets.yml dosyası gitmişti.
ddonche

Aynı problemi yaşadım. Çalışmak istemediğim bir şey için bir öğreticiyi takip etmek için kullandığım bir uygulama, bu yüzden yeni bir dizine klonladım ve eğitim yazarının taahhütlerini kopyaladım. Sorunu görmedim, bu yüzden config.secret_key'i manuel olarak ayarladım. Sadece rails sunucumu başlatırken öğrendim. Size olumlu oy verdim, böylece bu daha yüksek olabilir!
Joe

5

Sahip olup olmadığını kontrol edin config\initializers\secret_token.rb:

YourAppName::Application.config.secret_token

Olmalı:

YourAppName::Application.config.secret_key_base

4

Bende de aynı sorun var. Sorun şu satırlardan kaynaklanıyordu routes.rb:

devise_for :users, :skip => [:registrations]                                                   
as :user do
  get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'              
  put 'users' => 'devise/registrations#update', :as => 'user_registration'                      
  get '/users/sign_out' => 'devise/sessions#destroy'                                            
end

Onlara yorum yaptım ve ondan sonra koştum:

$ rails generate devise:install

Ve mükemmel bir şekilde değerlendirildi. Ve ondan sonra yorumsuz yollar.


Mükemmel teşekkürler. Yeni bir proje kurarken bu problemi yaşadım ve rails generate devise:installilk tasarım modelimi oluşturmadan önce unuttum . Bu cevaba göre, rotalardaki devise_for satırını yorumladı, ardından üret komutunu çalıştırdı ve çalışıyor.
user208769

devise_forrake db: işe geçiş yapmak için satırın dışına yorum yaptım .. neden olduğuna dair hiçbir fikrim yok
Clam

1

Eh, bu yazıyı takip ediyorum ve burada hemen hemen her şeyi denedim. Anahtarı ekledim devise.rb. Ama yine de aynı hatayı alıyordum.

Belki aptalca bir cevap, ama tek yapmam gereken devise.rbanahtarı depoya itmekti.


1

Düzeltme:

  1. Üretim sunucusunda:

    sudo -H nano /etc/environment
  2. Ardından dosyaya şunu ekleyin:

    export SECRET_KEY_BASE="yourkey"
    export DEMO03_DATABASE_PASSWORD="yourpass"

    bunu kalıcı olarak ve sistem genelinde (tüm kullanıcılar, tüm işlemler) ayarlamak için set değişkeni ekleyin

  3. Yerel proje devise.rbdosyasında:

    config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?

Teknik detaylar:

  • Ubuntu 16.04
  • Geliştirme (4.2.0)
  • raylar 5.0.1
  • kapistrano (3.7.1)

1

Rails 5.2.0 ve Devise 4.4.1 ile aynı sorunla karşılaştım

Aşağıdakileri /config/initializers/devise.rb içine bırakın

config.secret_key = Rails.application.credentials.secret_key_base

1
bu, üretimde daha az güvenlidir ve bir güvenlik ihlali durumunda değiştirmeyi zorlaştırır.
lacostenycoder

0

Yukarıdakilere biraz daha eksiksiz bir cevap vermeye çalışmak: devise_auth_token gem'in belgelerinde belirtildiği gibi

... Ek olarak, geleneksel devise.rb dosyasını adresinde manuel olarak oluşturarak düzeneğin diğer yönlerini yapılandırabilirsiniz config/initializers/devise.rb. İşte bu dosyada yapabileceklerinize dair bazı örnekler:

Devise.setup do |config|   
# The e-mail address that mail will appear to be sent from   
# If absent, mail is sent from "please-change-me-at-config-initializers-devise@example.com"  
config.mailer_sender = "support@myapp.com"

# If using rails-api, you may want to tell devise to not use ActionDispatch::Flash   
# middleware b/c rails-api does not include it.   
# See: http://stackoverflow.com/q/19600905/806956  
config.navigational_formats = [:json] end

Aynı problemi yaşadım ve burada anlatıldığı gibi, tasarlama başlatıcıyı yarattım ve config.secret_key = ENV['DEVISE_SECRET_KEY']ona satırı ekledim .


-1

Doğru çözümü bilmiyorum ama işe yarıyor. Deneyebilirsin. Projemi GitLab hesabımdan klonladım ve yerel sunucumda çalıştırdığımda bir hata mesajı alıyorum:

rake aborted! Devise.secret_key was not set. Please add the following to your Devise initializer: config.secret_key = '-- secret key --'

config/initializers/devise.rbBu satırı açın ve ekleyin

config.secret_key = '<%= ENV["SECRET_KEY_BASE"] %>'

Bu kod satırı sorunumu çözdü.


config, Ruby roketlerini <%= %>dizge enterpolasyonu olarak değerlendirmez. Daha sonra anahtarınız kelimenin tam anlamıyla dizgenin içine yazdığınız şey olacaktır' what ever the %he!@#$ you type here is your key no matter what characters'
lacostenycoder
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.