2014-05-17 6 views
1

저는 레일 및 heroku를 처음 사용하여 기본 앱을 만들었습니다. 나는 지난 2 주 동안 단지 1 개의 dyno를 사용하여 Heroku에서 놀았습니다. 이제는 2로 증가했으며 CSRF 오류가 발생했습니다. 두 번째 dyno가 관련되면 인증 토큰이 재설정되기 때문입니다. 적어도 이것이 내가 생각하는 것입니다. 그러나 나는 아직도 배우고있다.1 Dyno에서 2로 증가하면 authenticity_token 오류가 발생합니다.

나는 Resque, Sidekiq, memcached 및 dalli에 관한 많은 것을 Podcast 등에서 들었습니다. 이것은 내가 가서 배우는 데 필요한 것인가? 그래서이 사용자 세션을 유지하는 방법을 여러 다이노 스가있는 이유를 알아낼 수 있습니다.

다음은 an early question의 후속입니다. 그러나 관련이 있는지 여부는 확실하지 않습니다. 또한 나는 phusion 여객과 달리고있다.

2014-05-17T08:46:59.603754+00:00 app[web.2]: App 120 stdout: Started POST "https://stackoverflow.com/users/sign_in" for 58.7.233.232 at 2014-05-17 08:46:59 +0000 
2014-05-17T08:46:59.603819+00:00 app[web.2]: App 120 stdout: Processing by Devise::SessionsController#create as HTML 
2014-05-17T08:46:59.603854+00:00 app[web.2]: App 120 stdout: Parameters: {"utf8"=>"✓", "authenticity_token"=>"GalqKSrYuU2l9o2vxo3aWeqf4Xfvy+g5GAWbSXC6pvc=", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]"}, "commit"=>"Login"} 
2014-05-17T08:46:59.957414+00:00 heroku[router]: at=info method=POST path=/users/sign_in host=slapp.herokuapp.com request_id=f58dcf4f-a95f-4280-b0f9-4de593992774 fwd="58.7.233.232" dyno=web.2 connect=2ms service=599ms status=302 bytes=1408 
2014-05-17T08:47:00.223198+00:00 heroku[router]: at=info method=GET path=/ host=slapp.herokuapp.com request_id=ddb2c5cc-0cc1-401b-ae98-b3c84a0fd8f7 fwd="58.7.233.232" dyno=web.1 connect=0ms service=15ms status=302 bytes=1178 
2014-05-17T08:47:00.722430+00:00 heroku[router]: at=info method=GET path=/users/sign_in host=slapp.herokuapp.com request_id=20ab26a9-6b46-4b12-8019-a297fa63d324 fwd="58.7.233.232" dyno=web.2 connect=1ms service=49ms status=200 bytes=3069 
2014-05-17T08:47:00.603875+00:00 app[web.2]: App 120 stdout: Redirected to https://slapp.herokuapp.com/ 

2014-05-17T08:47:00.603961+00:00 app[web.2]: App 120 stdout: Completed 302 Found in 547ms (ActiveRecord: 8.4ms) 
2014-05-17T08:47:01.037974+00:00 app[web.1]: App 120 stdout: Started GET "/" for 58.7.233.232 at 2014-05-17 08:47:00 +0000 
2014-05-17T08:47:01.037983+00:00 app[web.1]: App 120 stdout: Processing by StaticPagesController#index as HTML 
2014-05-17T08:47:01.037987+00:00 app[web.1]: App 120 stdout: Completed 401 Unauthorized in 2ms 

2014-05-17T08:47:01.604254+00:00 app[web.2]: App 120 stdout: Rendered layouts/_shim.html.haml (3.0ms) 
2014-05-17T08:47:01.604275+00:00 app[web.2]: App 120 stdout: Rendered layouts/_navigation.html.haml (4.5ms) 
2014-05-17T08:47:01.604377+00:00 app[web.2]: App 120 stdout: Completed 200 OK in 30ms (Views: 22.2ms | ActiveRecord: 0.0ms) 
2014-05-17T08:47:01.604203+00:00 app[web.2]: App 120 stdout: Rendered devise/sessions/new.html.haml within layouts/application (9.5ms) 
2014-05-17T08:47:01.604088+00:00 app[web.2]: App 120 stdout: Started GET "https://stackoverflow.com/users/sign_in" for 58.7.233.232 at 2014-05-17 08:47:00 +0000 
2014-05-17T08:47:01.604302+00:00 app[web.2]: App 120 stdout: Rendered shared/_flash_messages.html.haml (0.3ms) 
2014-05-17T08:47:01.604175+00:00 app[web.2]: App 120 stdout: Processing by Devise::SessionsController#new as HTML 
2014-05-17T08:47:01.604335+00:00 app[web.2]: App 120 stdout: Rendered layouts/_footer.html.haml (0.3ms) 

답변

4

나는이 문제가 너무, devise 3.2.4, 레일 4.0.5 및 유니콘과 함께했다.

비밀 토큰을 생성하여 디스크에 저장했습니다. 그러나 각각의 heroku dyno에는 자체 파일 시스템이 있기 때문에 두 dynos 모두 자신의 비밀 토큰을가집니다. 요청이 다른 dyno로 갔을 때 다른 비밀 토큰을 사용하고 세션이 종료되었습니다.

토큰은 ENV 변수에 저장해야이 같은 secret_token.rb에서 사용 :

YourApp::Application.config.secret_key_base = ENV['SECRET_TOKEN'] 

토큰

rake secret 

를 생성하고

heroku config:set SECRET_TOKEN=yourtoken 
로 설정