Не разрабатывать секретный ключ

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

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

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

Ответ 1

Сегодня утром я провел bundle update и начал получать ту же ошибку.

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

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

Ответ 2

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

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

Ответ 4

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

Добавьте код ниже в файл config/initializers/devise.rb.

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

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

Ответ 5

По changelog:

Devise будет использовать secret_key_base в приложениях Rails 4+ в качестве его secret_key. Вы можете изменить это и использовать свой секрет, изменив инициализатор devise.rb.

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

До:

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

После:

production: 
  secret_key_base: string of charaters

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

Ответ 6

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

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

Ответ 7

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

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

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

$ heroku config

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

Ответ 8

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

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

в config/initializers/devise.rb Теперь он работает как в производстве, так и в разработке!

Ответ 9

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

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

Ответ 10

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

YourAppName::Application.config.secret_token

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

YourAppName::Application.config.secret_key_base

Ответ 11

Я клонировал свой репозиторий на новый компьютер из git.

config/secrets.yml 

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

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

rails generate devise MODEL

и он работал.

Ответ 12

Fix:

  • На рабочем сервере:

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

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

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

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

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

Технические детали:

  • Ubuntu 16.04
  • Разработка (4.2.0)
  • rails 5.0.1
  • capistrano (3.7.1)

Ответ 13

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

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

Ответ 14

Попытка дать несколько более полный ответ на приведенные выше: Как упоминалось в devise_auth_token gem документация

... Кроме того, вы можете настроить другие аспекты разработки вручную создание традиционного файла devise.rb на config/initializers/devise.rb. Вот несколько примеров того, что вы можете в этом файле:

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

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