Devise Secret Key가 설정되지 않았습니다.


99

관리 백엔드 용 Active Admin gem을 사용하여 Rails 4 앱을 개발 중입니다. Active Admin은 사용자 인증을 위해 Devise를 사용합니다. 이제 capistranoVPS 서버에서 사용하여 앱을 배포하려고 하면 다음 오류가 발생합니다.

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 ?


@mrbrdo yes 메시지는 누락 된 내용을 정확히 알려 주지만 devise.rb 파일을 열면 secret key. 또한 새로 설치를 실행하는 경우 응용 프로그램이이를 처리해야합니다. github.com/plataformatec/devise/issues/2554 의 티켓 덕분에 문제가 해결되었습니다.

답변:


87

나는 bundle update오늘 아침에 뛰었고 같은 오류가 발생하기 시작했습니다.

나는 그것을 줄로 추가 config/initializers/devise.rb했고 오류가 수정되었습니다.

이것은 그것을 소개 한 커밋 인 것 같습니다 .


24
미래의 Google 직원, 2014-07-08 현재 stackoverflow.com/questions/18080910/… 은 Rails 4+에 대한 더 적절한 대답으로 구성 전체에 비밀이 퍼지는 것을 방지합니다.
Zachary Moshansky

3
2015 년 10 월 30 일 현재 stackoverflow.com/a/32525855/1842747 이 가장 좋은 대답이지만, "비밀 키"를 잊지 않도록 SECRET_KEY_BASE환경 변수를 복사하는 대신 바로 설정하는 것이 좋습니다. secrets.yml충분히 비밀이 아닙니다!
monozok

38

Rails 4.1 및 Devise 3.2.4에서 나를 위해 일한 것은 다음과 config/initializers/devise.rb같습니다.

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

또는 figarogem 을 사용하는 경우 :config.secret_key = Figaro.env.devise_secret_key if Rails.env.production?
Alexander

33

현재 고안 3.2.3 에 키 설정 위치 기본값 레일 4 + 응용 프로그램에 대한 YourAppName :: Application.config.secret_key_base가 발견에서 설정 / 초기화 / secret_token.rb


2
아, 반갑습니다. 오픈 소스 앱에서 Devise 비밀 키를 소스의 일반 텍스트 어딘가에 배치하는 것은 매우 나쁜 일이라는 것을 이해합니다. 맞습니까? 최소한이 기본값을 사용하면 더 적은 위치에 동적 비밀 키를 설정할 수 있습니다.
Topher Hunt

4
전문가가 아닌 사람들을 위해 누군가이 정보로 무엇을해야하는지 설명 할 수 있습니까? 감사!
ahnbizcad

2
내 앱에 해당 파일이 표시되지 않습니다. 이것은 rails g devise : install이 성공적으로 작동하지 않았 음을 의미합니까? 아니면이 답변이 이미 구식입니까?
ahnbizcad

10
시대에 뒤쳐진. secret_token.rb는 Rails 4와 함께 제공되지 않으며 config / secrets.yml 로 대체되었습니다 (자세한 내용은 여기 참조 ). 주제에서 약간 벗어 났지만 Rails에서 생성 된 주석에서와 같이 .gitignore에 config / secrets.yml을 포함해야합니다. 방법을 알아 보려면 여기 로 이동 하세요 .
brntsllvn 2015 년

12

이것은 내 문제를 해결했습니다.

아래 코드를 config / initializers / devise.rb 파일에 추가 하십시오.

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

'-secret key--'를 자신의 키로 바꿉니다. 보안을 위해 ENV 변수에 저장하는 것이 좋습니다.


2
어떻게 \ 어디서 어떻게 연결합니까?
ahnbizcad

3
^ 대답은 figaro gem을 사용하는 것입니다. github.com/laserlemon/figaro 모든 실제 키를 config / application.yml 파일에 넣고 비밀로 유지하도록 gitignore하고 애플리케이션의 다른 곳에서 참조하십시오 ENV["your_particular_secret_key_name"]. 그런 다음 앱이 키를 동적으로 참조합니다. 하지만 키를 무시 했으므로 프로덕션 환경으로 어떻게 가져 오나요? 당신은 피가로를 사용하여 Heroku가 해당 지역의 개발 환경에서 직접 밀어 비밀 키에게 Heroku에 환경 변수로 끝날 것
ahnbizcad

12

에 따라 변경 내역 :

Devise는 Rails 4+ 애플리케이션의 secret_key_base를 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.


11
이것은 안티 패턴입니다. 생산 비밀 키를 체크인하지 마십시오.
Zack Brown

10

당신이 뛰지 않았을까요 rails g devise:install?

rails generate devise User이전 명령없이 실행 하면이 문제가 발생합니다.


1
그게 내 문제인데 어떻게 고치는 지 ...?
C404

사용자 생성 후 "rails g devise : install"을 다시 실행할 수 있어야합니다. git을 사용하는 경우 테스트 분기를 만들고 시도하십시오. 그렇지 않은 경우 프로젝트 사본에서 시도해보십시오.
sascha.daniels 2014 년

이것이 내 문제였습니다. 앱을 삭제하고 (별로하지 않았 음) rails g devise user사용자 테이블을 만들고 마이그레이션하기 전에 삭제했습니다 . 이것은 문제를 해결했습니다.
Matt

이것은 Rails 5.0.0.beta4 및 Devise 4.1.1에서 동일한 문제를 해결했지만 이유를 모르겠습니다. diff를 실행했고 다른 비밀 키를 제외하고 내 devise.rb에서 변경된 유일한 라인은 + 102 : "config.stretches = Rails.env.test?? 1 : 11"
Cleverlemming

10

에서 config/initializers/devise.rbI 넣어 :

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

명확히하기 위해 큰 따옴표를 사용하십시오. "<% = ENV ["SECRET_KEY_BASE "] %>"
user1515295

3
devise.rb는 erb 파일이 아니라 루비 파일입니다. <% = 구문이 필요하지 않습니다. config.secret_key = ENV [ "SECRET_KEY_BASE"]를 사용하세요.
John Hinnegan

6

이 추악한 접근 방식으로 초기화 문제를 해결합니다.

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

config / initializers / devise.rb에서 이제 프로덕션과 개발에서 작동합니다!


6

내 저장소를 git에서 새 컴퓨터에 복제했습니다. 그만큼

config/secrets.yml 

파일이 내 .gitignore 목록에 있으므로 해당 파일이 존재하지 않았고 Devise가 파일을 생성하지 않습니다.

파일을 추가 한 다음 다시 실행했습니다.

rails generate devise MODEL

그리고 그것은 작동했습니다.


1
이. Github는 secrets.yml.gitignore파일 에 추가하는 것이 도움이된다고 생각했습니다 . 나는 그것을 철저히 읽지 않았고 생성 된 Rails .gitignore파일 보다 훨씬 더 많은 것을 포함하고 있다는 막연한 인상을 받았다 . : facepalm :
스티브

네, 이것이 제 문제였습니다. 이전 git 커밋으로 되 돌렸고 secrets.yml 파일이 사라졌습니다.
ddonche

이 같은 문제가있었습니다. 튜토리얼을 따라 가기 위해 사용하는 앱이 작동하고 싶지 않았기 때문에 새 디렉토리에 복제하고 튜토리얼 작성자의 커밋을 복사했습니다. 문제를 보지 못해서 config.secret_key를 수동으로 설정했습니다. 내 레일 서버를 부팅 할 때만 알아 냈습니다. 더 높을 수 있도록 업 보트를 주셨습니다!
Joe

5

다음 사항 config\initializers\secret_token.rb이 있는지 확인하십시오 .

YourAppName::Application.config.secret_token

그것은해야한다:

YourAppName::Application.config.secret_key_base

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

그리고 그것은 완벽하게 평가되었습니다. 그 후 나는 경로의 주석을 제거했습니다.


완벽 해, 고마워. 새 프로젝트를 설정하는 데이 문제가 rails generate devise:install있었고 첫 번째 고안 모델을 만들기 전에 잊었습니다 . 이 답변에 따라 경로에서 devise_for 줄을 주석 처리 한 다음 generate 명령을 실행하면 작동합니다.
user208769 2014-01-10

나는 devise_for내 갈퀴를 얻기 위해 줄을 주석으로 달았다. db : migrate to work .. 이유
Clam

1

글쎄, 나는이 게시물을 따르고 여기에서 거의 모든 것을 시도했습니다. 나는 키를 추가했습니다devise.rb . 하지만 여전히 같은 오류가 발생했습니다.

어리석은 대답 일 수도 있지만, 내가해야 할 일은 devise.rb키를 저장소 로 푸시하는 것뿐이었습니다 .


1

고치다:

  1. 프로덕션 서버에서 :

    sudo -H nano /etc/environment
  2. 그런 다음 파일에 다음을 추가하십시오.

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

    이를 영구적으로 설정하고 시스템 전체 (모든 사용자, 모든 프로세스)에 set 변수 추가

  3. 로컬 프로젝트 devise.rb파일에서 :

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

기술적 세부 사항:

  • Ubuntu 16.04
  • Devise (4.2.0)
  • 레일 5.0.1
  • 카피 스트라 노 (3.7.1)

1

Rails 5.2.0 및 Devise 4.4.1에서 동일한 문제가 발생했습니다.

다음을 /config/initializers/devise.rb에 드롭하십시오.

config.secret_key = Rails.application.credentials.secret_key_base

1
이것은 프로덕션에서 덜 안전하며 보안 위반시 변경하기 어렵게 만듭니다.
lacostenycoder

0

위의 답변에 대해 좀 더 완전한 답변을 제공하려고합니다. devise_auth_token gem의 문서 에서 언급 한대로

... 또한 기존 devise.rb 파일을에서 수동으로 생성하여 devise의 다른 측면을 구성 할 수 있습니다 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 "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

나는 같은 문제가 있었고 여기에서 config.secret_key = ENV['DEVISE_SECRET_KEY']언급 한 것처럼 devise initializer를 만들고 여기에 줄을 추가 했습니다.


-1

나는 올바른 해결책을 모르지만 작동합니다. 시도해 볼 수 있습니다. 내 GitLab 계정에서 내 프로젝트를 복제했으며 로컬 서버에서 실행하면 오류 메시지가 나타납니다.

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

config/initializers/devise.rb이 줄을 열고 추가

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

이 코드 라인은 내 문제를 해결했습니다.


config는 루비 로켓 <%= %>을 문자열 보간으로 평가하지 않습니다 . 키는 말 그대로 문자열 리터럴 내부에 입력 한 어떤 것' what ever the %he!@#$ you type here is your key no matter what characters'
lacostenycoder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.