Rails + Sinatra应用程序共享会话

我还没有找到一个好的答案。 如何才能将我的Rails应用程序和Sinatra应用程序(安装在我的Rails应用程序的config.ru中)成功共享会话? 如果我首先访问我的Sinatra应用程序,然后是Rails应用程序,我得到一个错误,如undefined method sweep for {}:Hash ,大概是因为Rails使用Hash的自定义子类来存储会话信息,而Rack :: Session :: Cookie不会“T。 我的代码到目前为止:

config.ru

 map "/" do run MyRailsApp::Application end map "/sinatra" do use Rack::Session::Cookie, key: "_app_session", secret: "" run MySinatraApp end 

配置/初始化/ session_store.rb

 MyRailsApp::Application.config.session_store :cookie_store, key: '_app_session' 

配置/初始化/ secret_token.rb

 MyRailsApp::Application.config.secret_token = "" # same as config.ru 

我错过了什么?

Rails源代码的快速报告显示, sweepActionDispatch::Flash::FlashHash上的一种方法,Rails将该方法存储在flash key下的会话中。

Sinatra-Flash也使用会话的flash键,但它在那里存储一个普通的Hash对象。

Rails在session['flash']获取对象,这是由Sinatra放置的Hash ,假设它是一个FlashHash并尝试在其上调用sweep ,因此错误消息: undefined method sweep for {}:Hash

可能的解决方法可能是在Sinatra应用程序中使用闪存中的不同键而不是默认值(例如flash(:my_flash)[:error]="foo" )。

如果你想在Rails和Sinatra之间使用flash来查看消息,那将无济于事。

“未定义方法扫描{}:哈希”问题是您的浏览器存储以前缓存的Cookie。 只需删除与应用程序相关的cookie并刷新浏览器即可。 它对我有用。