2013-08-06 3 views
88

Я разрабатываю приложение Rails 4, используя массив Active Admin для администрирования. Active Admin, в свою очередь, использует Devise для аутентификации пользователей. Теперь, когда я пытаюсь развернуть приложение с помощью capistrano на сервере VPS, я получаю ошибку ниже:Devise Secret Key не был установлен

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

Поиск Google не делает много для этой ошибки. Любые предложения, почему это порождает ошибку? Должен ли я добавить секретный ключ к инициализатору devise, так как я не могу найти место для установки такого конфигурационного ключа в initializers/devise.rb?

+0

@mrbrdo да сообщение о том, что именно отсутствует, но при открытии файла devise.rb отсутствует документация о секретном ключе. Кроме того, если вы используете новую установку, приложение должно позаботиться об этом. Благодаря билету https://github.com/plataformatec/devise/issues/2554 он был разрешен. –

ответ

73

Я бежал bundle update этим утром и начал получать ту же ошибку.

Я добавил его как строку в config/initializers/devise.rb и исправлена ​​ошибка.

Это, кажется, commit, который представил его.

+21

Future Googlers. Начиная с 2014-07-08 https://stackoverflow.com/questions/18080910/devise-secret-key#answer-22584303 является более правильным ответом для Rails 4+, чтобы избежать распространения секретов в конфигурации. –

+3

По состоянию на 2015-10-30 http://stackoverflow.com/a/32525855/1842747 - лучший ответ, но я настоятельно рекомендую перейти к настройке переменной среды 'SECRET_KEY_BASE' вместо того, чтобы копировать ее в' secrets.yml 'поэтому вы не забываете, что ваш« секретный ключ »недостаточно секретен! – monozok

6

Я решить мою проблему инициализатора с этим уродливым подходом:

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

в конфигурации/Инициализаторы/devise.rb теперь он работает на производстве, а также в разработке!

9

Может быть, что вы не запустили rails g devise:install?

Запуск rails generate devise User без предыдущей команды вызывает эту проблему.

+0

Это моя проблема, но как вам это исправить ...? – C404

+0

После создания пользователей должно быть возможно выполнить «rails g devise: install». Если вы используете git, создайте тестовую ветку и попробуйте. Если нет, попробуйте его на копии вашего проекта. –

+0

Это моя проблема. Я удалил приложение (я не сделал много) и сделал «rails g devise user», прежде чем попытался создать таблицу пользователя и перенести ее. Это поставило проблему. – Matt

4

У меня такой же выпуск. Проблема была вызвана этими линиями в 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 

Я заметил их, и после того, что я бегу:

$ rails generate devise:install 

И оценил отлично. И после этого я расколол маршруты.

+0

Отлично, спасибо. Если эта проблема создала новый проект и забыла, что «rails generate devise: install» перед созданием моей первой модели разработки. В соответствии с этим ответом прокомментировав строку devise_for в маршрутах, запустите команду generate, и она работает. – user208769

+0

Я прокомментировал строку 'devise_for', чтобы получить мой рейк db: перейти на работу .. не знаю, почему хотя – Clam

12

Это решило мою проблему:

Добавить этот код в ваш конфигурации/инициализаторов/devise.rb файл.

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

Замените «секретный ключ» на свой ключ. Я рекомендую хранить его в переменной ENV для целей безопасности.

+2

Как \ где вы это делаете и как вы их связываете? – ahnbizcad

+1

^Ответ на этот вопрос - использовать драгоценный камень figaro. github.com/laserlemon/figaro. Вы помещаете все свои фактические ключи в файл config/application.yml, gitignore, чтобы они оставались в секрете и ссылались на них в другом месте вашего приложения, например, так: 'ENV [" your_particular_secret_key_name "]'. Затем ваше приложение динамически ссылается на ваши клавиши.Но вы gitignored ваши ключи, так как вы можете получить их в вашей производственной среде? Вы подталкиваете их непосредственно из своей локальной среды разработки к героку с помощью figaro, и ваши секретные ключи окажутся в качестве переменных окружения на heroku. – ahnbizcad

29

По Devise 3.2.3 для Rails 4+ приложений ключевых значений по умолчанию местоположения параметра в YourAppName::Application.config.secret_key_base находятся в конфигурации/инициализаторах/secret_token.rb

+2

. О, хорошо знать. Я понимаю, что это приложение очень плохое для приложения с открытым исходным кодом, чтобы секретный ключ Devise сидел где-то в обычном тексте в источнике, правильно? По умолчанию это по умолчанию позволяет настраивать динамические секретные ключи в меньшем количестве мест. –

+3

Может ли кто-нибудь изложить, что делать с этой информацией, для не-профи? благодаря! – ahnbizcad

+1

Я не вижу файл в своем приложении. Означает ли это, что rails g devise: install не работает успешно? Или этот ответ уже устарел? – ahnbizcad

34

Что работало для меня на Rails 4.1 и DEViSE 3.2.4 в config/initializers/devise.rb:

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

Или если вы используете 'figaro' gem:' config.secret_key = Figaro.env.devise_secret_key, если Rails.env.production? ' –

4

Проверьте, если ваш config\initializers\secret_token.rb имеет:

YourAppName::Application.config.secret_token 

Оно должно быть:

YourAppName::Application.config.secret_key_base 
12

По changelog:

Devise will use the secret_key_base on Rails 4+ applications as its secret_key. You can change this and use your own secret by changing the devise.rb initializer.

Я пошел config/secrets.yml и изменил значение production.

До:

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

После:

production: 
    secret_key_base: string of charaters 

Конечно, это должно быть установлено в переменную окружения, которую я установить позже, но это по крайней мере, получил это работает. Я получил свою строку, используя bundle exec rake secret.

+6

Это анти-шаблон. Пожалуйста, не проверяйте секретный ключ вашего производства. –

8

В config/initializers/devise.rb я поставил:

config.secret_key = '<%= ENV["SECRET_KEY_BASE"] %>' if Rails.env == 'production' 

Потому что, если вы поставите:

$ heroku config 

Вы увидите secret_key_base для режима production.

+2

Я думаю, что с этим ответом возникает большая проблема с безопасностью. Если вы укажете одиночные кавычки вокруг «<% = ENV [" SECRET_KEY_BASE "]%> ', то я думаю, что вы получите точную строку символов вместо получения интерполированной базы секретных ключей. Другими словами, он буквально излагает ENV ["SECRET_KEY_BASE"], правильно? – user1515295

+0

ОК, это для советов! – rld

+0

Чтобы уточнить, используйте двойные кавычки: «<% = ENV [" SECRET_KEY_BASE "]%>" – user1515295

3

Я клонировал свой репозиторий на новую машину от git. Файл

config/secrets.yml 

был в моем списке .gitignore, так что файл не существует, и Разрабатывают не создает файл.

Я добавил файл, а затем повторно побежал

rails generate devise MODEL 

, и она работала.

+1

ЭТО. Гитуб подумал, что это полезно, добавив 'secrets.yml' в мой файл' .gitignore'. Я не дал ему подробного прочтения и был смутно впечатлен тем, что он включал гораздо больше, чем созданный файл Rails '.gitignore'. : facepalm: – steve

+0

Да, это моя проблема. Я вернулся к старой записи git, и файл secrets.yml исчез. – ddonche

0

Хорошо, я следил за этим сообщением и почти все здесь. Я добавил ключ к devise.rb. Но я все еще получал ту же ошибку.

Возможно, это глупый ответ, но все, что я должен был сделать, это нажать ключ devise.rb в репозиторий.

0

Попытка дать несколько более полный ответ на те выше: Как уже упоминалось в documentation

...Additionally, you can configure other aspects of devise by manually creating the traditional devise.rb file at config/initializers/devise.rb . Here are some examples of what you can do in this file:

Devise.setup do |config| 
# The e-mail address that mail will appear to be sent from 
# If absent, mail is sent from "[email protected]" 
config.mailer_sender = "[email protected]" 

# 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 

У меня была та же проблема в devise_auth_token драгоценного камня, и как metioned здесь, я создал Завещание инициализатор и добавьте к нему линию config.secret_key = ENV['DEVISE_SECRET_KEY'].

1

Fix:

  1. В сервере:

    sudo -H nano /etc/environment 
    
  2. Затем в файле добавить:

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

    , чтобы установить это на постоянной основе, и широкая система (все пользователи , все процессы) добавить заданную переменную

  3. В локальном проекте devise.rb файла:

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

Технические данные:

  • Ubuntu 16,04
  • DEViSE (4.2.0)
  • рельсы 5.0.1
  • capistrano (3.7.1)
0

Столкнулся же проблемы с Rails 5.2.0 и Придумайте 4.4.1

Капля следующее в /config/initializers/devise.rb

config.secret_key = Rails.application.credentials.secret_key_base 
Смежные вопросы