Sinatra应用程序在生产中遇到会话问题

时间:2017-04-19 19:57:40

标签: ruby session sinatra passenger

我一直在使用Sinatra在Ruby上开发Web应用程序。在开发过程中,我确实从未遇到很多会话问题。但是,现在我正在为乘客实际部署应用程序而我有很多关于该会话数据的问题一直在重置'。

我已经看到了与此问题相关的其他堆栈溢出问题,但尚未找到答案。我尝试过几件事:

似乎没有什么帮助真的...我要么最终出错,要么我的会话重置每个请求。我知道乘客可能使用多个线程,这就是会话无法正常工作的原因,但我似乎无法找到问题的解决方案。

我错过了一些明显的东西吗?有什么建议吗?

Gemfile

source "https://rubygems.org"

gem 'mongo', '1.8.6'
gem 'sinatra', '1.4.8'
gem 'mongo_mapper'
gem 'bson_ext'
gem 'active_model_serializers'
gem 'activemodel-serializers-xml'
gem 'sinatra-flash'
gem 'sinatra-param', require: 'sinatra/param'
gem 'rack-recaptcha2', git: 'https://github.com/nicolas-simplex/rack-    recaptcha'
gem 'mail'
gem 'slugify'
gem 'biz'
gem 'bcrypt'
gem 'redis-rack'

group :development do
  gem 'mailcatcher', '~> 0.6.4'
end

config.ru
它有不同的形式取决于我是否只使用Rack :: Session :: Pool,Memcache或Redis。这是我用于redis的那个:

require 'rubygems'
require 'sinatra'
require File.expand_path '../app.rb', __FILE__

require 'rack'
require 'rack/session/redis'

require_relative './app'

app = App.new

sessioned = use Rack::Session::Redis.new(app)

run sessioned

App.rb

require 'rubygems'
require 'bundler/setup'
require 'sinatra'

require 'slugify'

class App < Sinatra::Base
  use Rack::Protection

  set :bind, '0.0.0.0'
end

require_relative './config/init'  # Initialize configuration files
require_relative './helpers/init' # Initialize helpers
require_relative './routes/init'  # Initialize routes
require_relative './models/init'  # Initialize models

require_relative './util/tokens'  # Token utility

... # Some database seeding, basic setup for some data I use

TL; DR
Sinatra和Passenger一起重置了生产环节,而这在发展中并没有发生。

1 个答案:

答案 0 :(得分:0)

经过一些研究后,我发现了配置选项 passenger_sticky_sessions 。因为在我的Web应用程序中,会话存储非常重要,这对我来说很好。但是,并不建议在所有用例中使用它,因为所有客户端发送都将路由到同一个原始应用程序进程。

文档:https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_sticky_sessions

在启用nginx / sites-conf的conf文件中使用此配置参数'on',我只能使用简单的机架会话池:

use Rack::Session::Pool, path: '/', expire_after: 2592000