ruby-on-rails - Rails + Sinatra 应用分享会

标签 ruby-on-rails ruby session cookies sinatra

我还没有找到一个好的答案。如何让我的 Rails 应用程序和 Sinatra 应用程序(安装在我的 Rails 应用程序的 config.ru 中)成功共享 session ?如果我先访问我的 Sinatra 应用程序,然后访问 Rails 应用程序,我会收到类似 undefined method sweep for {}:Hash 的错误,大概是因为 Rails 使用 Hash 的自定义子类来存储 session 信息,而 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

我错过了什么吗?

最佳答案

Rails 源代码的快速 grep 显示 sweepActionDispatch::Flash::FlashHash 上的一个方法,Rails 将其存储在flash 键下的 session 。

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

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

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

不过,如果您想在 Rails 和 Sinatra 之间切换时使用 flash 查看消息,那将无济于事。

关于ruby-on-rails - Rails + Sinatra 应用分享会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9135236/

相关文章:

ruby-on-rails - Rails Wicked PDF 错误日志(图像未渲染)

ruby - 从线程循环中脱离出来

java - 当用户未使用 Servlet 登录时如何重定向到索引页面?

javascript - AJAX 可访问的长时间运行的服务任务在启用 ASP.NET 兼容性/ session 的环境中阻止后续的 AJAX 服务请求

asp.net - 在页面之间存储 ID 最多一天?

ruby-on-rails - 如何使用 Capybara 测试 OPTIONS 请求?

ruby-on-rails - yaml文件中的新行 "\n"

ruby - 使用 Ruby 更好地实现命令行随机化

ruby-on-rails - RAILS 我应该使用什么样的关系?

ruby - Nothing Known About ... 使用 ri 数组时——Ruby