我还没有找到一个好的答案。如何让我的Rails应用程序和挂载在Rails应用程序的config.ru文件中的Sinatra应用程序成功共享会话?如果我先访问Sinatra应用程序,然后访问Rails应用程序,我会得到一个错误,如
有我漏掉的吗?
undefined method sweep for {}:Hash
,这可能是因为Rails使用自定义的Hash子类来存储会话信息,并且Rack::Session::Cookie不支持。我的代码如下:
config.ru
map "/" do
run MyRailsApp::Application
end
map "/sinatra" do
use Rack::Session::Cookie,
key: "_app_session",
secret: "<SECRET_KEY>"
run MySinatraApp
end
config/initializers/session_store.rb
MyRailsApp::Application.config.session_store :cookie_store, key: '_app_session'
config/initializers/secret_token.rb
MyRailsApp::Application.config.secret_token = "<SECRET_KEY>" # same as config.ru
有我漏掉的吗?
ActionDispatch::Flash::FlashHash
对象,并尝试调用sweep
方法,因此出现错误undefined method sweep for {}:Hash
。一个可能的解决方法是在Sinatra应用程序中使用不同的键来存储flash而不是默认值(例如flash(:my_flash)[:error]="foo"
)。但如果您想在Rails和Sinatra之间使用flash查看消息,则无法解决该问题。 - matt