Rozwijam aplikację Rails 4 przy użyciu perełki Active Admin dla zaplecza administracyjnego. Active Admin z kolei używa Devise do uwierzytelniania użytkowników. Teraz, gdy próbuję wdrożyć aplikację capistrano
na serwerze VPS , pojawia się następujący błąd:
rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:
config.secret_key = '-- secret key --'
Wyszukiwarka Google niewiele robi w przypadku tego błędu. Jakieś sugestie, dlaczego wyrzuca błąd? Czy powinienem dodać tajny klucz do devise
inicjatora, ponieważ nie mogę znaleźć miejsca na ustawienie takiego klucza konfiguracyjnego initializers/devise.rb
?
ruby-on-rails
devise
scarver2
źródło
źródło
secret key
. Również jeśli uruchamiasz nową instalację, aplikacja powinna się tym zająć. Dzięki zgłoszeniu na github.com/plataformatec/devise/issues/2554 został rozwiązany.Odpowiedzi:
Pobiegłem
bundle update
dziś rano i zacząłem otrzymywać ten sam błąd.Dodałem go jako wejście liniowe
config/initializers/devise.rb
i błąd został naprawiony.Wydaje się, że jest to zatwierdzenie, które go wprowadziło.
źródło
SECRET_KEY_BASE
zmiennej środowiskowej zamiast jej kopiowania,secrets.yml
aby nie zapomnieć, że Twój „tajny klucz” nie jest wystarczająco tajne!To, co działało na Railsach 4.1 i Devise 3.2.4, to
config/initializers/devise.rb
:źródło
figaro
klejnotu:config.secret_key = Figaro.env.devise_secret_key if Rails.env.production?
Począwszy od Devise 3.2.3 dla aplikacji Rails 4+, lokalizacja ustawień klucza jest domyślnie ustawiona na YourAppName :: Application.config.secret_key_base w config / initializers / secret_token.rb
źródło
To rozwiązało mój problem:
Dodaj poniższy kod do pliku config / initializers / devise.rb .
Zastąp „- tajny klucz--” własnym kluczem. Ze względów bezpieczeństwa zalecam przechowywanie go w zmiennej ENV.
źródło
ENV["your_particular_secret_key_name"]
. Następnie aplikacja dynamicznie odwołuje się do kluczy. Ale gitignorowałeś swoje klucze, więc jak przenieść je do środowiska produkcyjnego? Wysyłasz je bezpośrednio ze swojego lokalnego środowiska programistycznego do Heroku za pomocą figaro, a Twoje tajne klucze staną się zmiennymi środowiskowymi na herokuZgodnie z dziennikiem zmian :
Poszedłem do
config/secrets.yml
i zmieniłemproduction
wartość.Przed:
Po:
Oczywiście powinno to być ustawione na zmienną środowiskową, którą ustawię później, ale to przynajmniej ją uruchomiło. Otrzymałem swój ciąg za pomocą
bundle exec rake secret
.źródło
Czy to możliwe, że nie uciekłeś
rails g devise:install
?Uruchomienie
rails generate devise User
bez poprzedniego polecenia powoduje ten problem.źródło
rails g devise user
zanim spróbowałem utworzyć tabelę użytkowników i przeprowadzić migrację. To rozwiązało problem.W
config/initializers/devise.rb
kładę:Ponieważ jeśli umieścisz:
Zobaczysz
secret_key_base
trybproduction
.źródło
Rozwiązuję swój problem z inicjatorem za pomocą tego brzydkiego podejścia:
w config / initializers / devise.rb Teraz działa zarówno w środowisku produkcyjnym, jak iw fazie rozwoju!
źródło
Sklonowałem moje repozytorium na nową maszynę z gita. Plik
plik był na mojej liście .gitignore, więc ten plik nie istniał, a Devise go nie tworzy.
Dodałem plik, a następnie uruchomiłem ponownie
i zadziałało.
źródło
secrets.yml
do mojego.gitignore
pliku było pomocne . Nie przeczytałem go dokładnie i byłem pod wrażeniem, że zawiera o wiele więcej niż wygenerowany.gitignore
plik Rails . : facepalm:Sprawdź, czy masz
config\initializers\secret_token.rb
:Powinno być:
źródło
Mam ten sam problem. Problem został spowodowany przez te linie w
routes.rb
:Skomentowałem je, a potem biegnę:
I to oceniono doskonale. A potem odkomentowałem trasy.
źródło
rails generate devise:install
przed utworzeniem mojego pierwszego modelu devise. Zgodnie z tą odpowiedzią, zakomentowałem linię devise_for w trasach, a następnie uruchom polecenie generowania i działa.devise_for
linię, aby uzyskać moją bazę rake: migrate to work .. nie mam pojęcia dlaczegoCóż, śledziłem ten post i próbowałem tutaj prawie wszystkiego. Dodałem klucz do
devise.rb
. Ale nadal otrzymywałem ten sam błąd.Może głupia odpowiedź, ale wszystko, co musiałem zrobić, to wcisnąć
devise.rb
klucz do repozytorium.źródło
Naprawić:
Na serwerze produkcyjnym:
Następnie w pliku dodaj:
aby ustawić to na stałe, i dla całego systemu (wszyscy użytkownicy, wszystkie procesy) dodaj ustawioną zmienną
W lokalnym
devise.rb
pliku projektu :Szczegóły techniczne:
źródło
Wpadłem w ten sam problem z Railsami 5.2.0 i Devise 4.4.1
Upuść poniższy plik do /config/initializers/devise.rb
źródło
Próbując dać nieco pełniejszą odpowiedź na wymienione powyżej: Jak wspomniano w devise_auth_token gem dokumentacji
Miałem ten sam problem i podobnie jak tutaj, stworzyłem inicjator devise i dodałem
config.secret_key = ENV['DEVISE_SECRET_KEY']
do niego linię.źródło
Nie znam właściwego rozwiązania, ale działa. Możesz tego spróbować. Zostałem sklonowany z mojego konta GitLab i kiedy uruchamiam się na serwerze lokalnym, pojawia się komunikat o błędzie:
rake aborted! Devise.secret_key was not set. Please add the following to your Devise initializer: config.secret_key = '-- secret key --'
Otwórz
config/initializers/devise.rb
i dodaj tę linięconfig.secret_key = '<%= ENV["SECRET_KEY_BASE"] %>'
Ta linia kodu rozwiązała mój problem.
źródło
<%= %>
jako interpolacji ciągów. Klucz będzie wtedy dosłownie co zostało wpisane wewnątrz ciąg dosłownym' what ever the %he!@#$ you type here is your key no matter what characters'