Ответ 1
Сегодня утром я провел bundle update
и начал получать ту же ошибку.
Я добавил его как строку в config/initializers/devise.rb
, и ошибка была исправлена.
Кажется, это commit, который представил его.
Я разрабатываю приложение 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
?
Сегодня утром я провел bundle update
и начал получать ту же ошибку.
Я добавил его как строку в config/initializers/devise.rb
, и ошибка была исправлена.
Кажется, это commit, который представил его.
Что работало для меня на Rails 4.1, Devise 3.2.4 находится в config/initializers/devise.rb:
config.secret_key = ENV['DEVISE_SECRET_KEY'] if Rails.env.production?
В разделе Devise 3.2.3 для приложений Rails 4+ по умолчанию установлено значение YourAppName:: Application.config.secret_key_base найден в config/initializers/secret_token.rb
Это решило мою проблему:
Добавьте код ниже в файл config/initializers/devise.rb.
config.secret_key = '-- secret key --'
Замените "секретный ключ" на свой собственный ключ. Я рекомендую хранить его в переменной ENV для целей безопасности.
По 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
.
Может быть, что вы не запускали rails g devise:install
?
Запуск rails generate devise User
без предыдущей команды вызывает эту проблему.
В config/initializers/devise.rb
я поставлю:
config.secret_key = '<%= ENV["SECRET_KEY_BASE"] %>' if Rails.env == 'production'
Потому что если вы положили:
$ heroku config
Вы увидите secret_key_base
для режима production
.
Я решаю мою задачу инициализатора с этим уродливым подходом:
config.secret_key = 'some1234keyq23' if Rails.env == 'production'
в config/initializers/devise.rb Теперь он работает как в производстве, так и в разработке!
У меня такая же проблема. Проблема была вызвана этими строками в 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
И он отлично оценивается. И после этого я расколол маршруты.
Проверьте, есть ли у вашего config\initializers\secret_token.rb
:
YourAppName::Application.config.secret_token
Это должно быть:
YourAppName::Application.config.secret_key_base
Я клонировал свой репозиторий на новый компьютер из git.
config/secrets.yml
был в моем .gitignore списке, так что файл не существовал, а Devise не создает файл.
Я добавил файл, затем перезапустил
rails generate devise MODEL
и он работал.
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?
Технические детали:
Хорошо, я следил за этим сообщением и почти все здесь.
Я добавил ключ к devise.rb
. Но я все еще получал ту же ошибку.
Может быть, глупый ответ, но все, что мне нужно было сделать, это нажать клавишу devise.rb
в репозиторий.
Попытка дать несколько более полный ответ на приведенные выше: Как упоминалось в 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']
.