2017-04-19 47 views
0

我一直在使用Sinatra在Ruby中處理Web應用程序。在開發過程中,我從來沒有遇到過很多與會話有關的問題。但是,現在我正在使用乘客來實際部署應用程序,我有很多關於會話數據不斷被「重置」的問題。Sinatra應用程序在生產中遇到了會話問題

我見過與此問題有關的其他堆棧溢出問題,但沒有答案尚未解決它給我。我試了幾件事情:

沒有什麼似乎在幫助真的......我最終有一個錯誤或我的會話得到重置每個請求。我知道乘客可能使用多個線程,這是會話不起作用的原因,但我似乎無法找到解決問題的方法。

我在這裏錯過了一些明顯的東西嗎?有什麼建議麼?

的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
這取決於如果我使用的只是貨架::會議::池,內存緩存或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
西納特拉和乘客一起重置生產會議,雖然這並不發展中發生。

回答

0

經過一番研究,我發現配置選項passenger_sticky_sessions。因爲在我的Web應用程序會話存儲非常重要,這對我來說工作得很好。但是,不建議在所有使用情況下使用此功能,因爲所有客戶端發送的數據都將路由到相同的始發應用程序進程。

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

隨着「開」這個配置參數啓用站點,在nginx的/我的conf文件,我可以只使用簡單的機架會話池:

use Rack::Session::Pool, path: '/', expire_after: 2592000 
相關問題