ruby-on-rails - 使用Sinatra,Thin,Rails和Rack::Cascade的Rack::Session:Cookie错误

标签 ruby-on-rails sinatra rack thin

我有一个组合的Sinatra/Rails应用程序,该应用程序使用Rack::Session::Cookie共享一个 session 。使用Rack::Handler::Thin.run应用程序启动时,该应用程序运行良好,但是如果 Rack 文件以瘦启动方式启动,则在Rack::Session::Cookie中出现错误:


!! Unexpected error while processing request: no marshal_dump is defined for class Proc
no marshal_dump is defined for class Proc
 /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.0.1/lib/rack/session/cookie.rb:64:in `dump'
 /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.0.1/lib/rack/session/cookie.rb:64:in `commit_session'
 /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.0.1/lib/rack/session/cookie.rb:38:in `call'
 /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.5/lib/thin/connection.rb:76:in `block in pre_process'
 /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.5/lib/thin/connection.rb:74:in `catch'
 /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.5/lib/thin/connection.rb:74:in `pre_process'
 /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.5/lib/thin/connection.rb:57:in `process'
 /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.5/lib/thin/connection.rb:42:in `receive_data'
 /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run_machine'
 /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run'
 /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.5/lib/thin/backends/base.rb:57:in `start'
 /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.5/lib/thin/server.rb:156:in `start'
 /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.5/lib/thin/controllers/controller.rb:80:in `start'
 /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.5/lib/thin/runner.rb:177:in `run_command'
 /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.5/lib/thin/runner.rb:143:in `run!'
 /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.5/bin/thin:6:in `'

Rack 文件如下所示:

require ::File::dirname(__FILE__) + '/config/environment'
require 'thin'

app = Rack::Builder.new {
  use Rails::Rack::Static
  run Rack::Cascade.new([Sinatra::Application, ActionController::Dispatcher.new])
}.to_app

use Rack::Session::Cookie, :key => '_example', :domain => 'example.org',
  :secret => 'secret'

# have to use this
Rack::Handler::Thin.run app, :Port => 4000, :Host => "0.0.0.0"
# want to use: run app

最佳答案

您是否尝试过像这样的事情:

app = Rack::Builder.new {
  use Rack::Session::Cookie, :key => '_example', :domain => 'example.org', :secret => 'secret'
  use Rails::Rack::Static
  run Rack::Cascade.new([Sinatra::Application, ActionController::Dispatcher.new])
}.to_app

看来您的问题是您在app之外使用Rack::Session::Cookie。

关于ruby-on-rails - 使用Sinatra,Thin,Rails和Rack::Cascade的Rack::Session:Cookie错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2187767/

相关文章:

ruby - 带有字符串参数的 Sinatra 应用程序的 Heroku rake 任务失败

mysql - Sinatra 的 REST API 路由无法正常工作

ruby-on-rails - 我在哪里放置 "use Rack::Facebook::MethodFix"以使用 Rack fix 修复 Facebook Post Canvas 问题?

ruby-on-rails - Ruby on Rails - 轮胎 - elasticsearch,如何对导入的数据进行排序?

ruby-on-rails - 如何在 rails 之外使用 active_support 提供的方法

javascript - Sprockets::FileNotFound:在 Rails 应用程序中找不到类型为 'jquery' Heroku 的文件 'application/javascript'

ruby sinatra远程连接

ruby-on-rails - 无法从 Ruby 中的 Action Mailer 中访问某些方法

ruby-on-rails - Rails Controller URL是否为我取消编码参数?

ruby - Sinatra 请求 ["SOME_HEADER"] 不适用于 POST;文档错误?