아직 답변을 찾지 못했습니다. 세션을 성공적으로 공유하기 위해 Rails 앱과 Sinatra 앱 (Rails 앱의 config.ru에 마운트 됨)을 어떻게 얻을 수 있습니까? Rails가 세션 정보를 저장하기 위해 해시의 사용자 정의 하위 클래스를 사용하고 Rack :: Session :: Cookie를 사용하지 않기 때문에 Synatra 앱을 먼저 방문한 다음 Rails 앱을 방문하면 undefined method sweep for {}:Hash
과 같은 오류가 발생합니다. 지금까지 내 코드 :Rails + Sinatra 앱 공유 세션
config.ru
map "/" do
run MyRailsApp::Application
end
map "/sinatra" do
use Rack::Session::Cookie,
key: "_app_session",
secret: "<SECRET_KEY>"
run MySinatraApp
end
설정/초기화/session_store.rb
MyRailsApp::Application.config.session_store :cookie_store, key: '_app_session'
설정/초기화/secret_token.rb
MyRailsApp::Application.config.secret_token = "<SECRET_KEY>" # same as config.ru
내가 놓친 것은 무엇입니까?
Sinatra 앱에서 랙 플래시 (또는 다른 플래시 구현)를 사용하고 있습니까? – matt
나는 sinatra-flash를 사용하고 있습니다. – codykrieger
나는 무슨 일이 일어나고있는가? sinatra-flash는 "flash"키 아래에 (일반, 루비) 해쉬를 세션에 추가하고있다. Rails는 그 키 밑에있는 것이 무엇이든지'ActionDispatch :: Flash :: FlashHash' 객체가 될 것으로 기대하고,'sweep' 메소드를 호출하려고합니다. 따라서'{Hash}에 대한 정의되지 않은 메소드 스윕 '오류가 발생합니다. 가능한 해결 방법은 Sinatra 앱에서 기본 키 (예 :'flash (: my_flash) [: error] = "foo"') 대신 다른 키를 사용하는 것입니다. Rails와 Sinatra간에 갈 때 메시지를보기 위해 플래시를 사용하고 싶다면 도움이되지 않습니다. – matt