我一直在使用Sinatra在Ruby中處理Web應用程序。在開發過程中,我從來沒有遇到過很多與會話有關的問題。但是,現在我正在使用乘客來實際部署應用程序,我有很多關於會話數據不斷被「重置」的問題。Sinatra應用程序在生產中遇到了會話問題
我見過與此問題有關的其他堆棧溢出問題,但沒有答案尚未解決它給我。我試了幾件事情:
- Putting 'use Rack::Session::Pool' inside config.ru as suggested here
- Used Rack::Session::Pool like explained here
- Tried Memcache as explained here
- Tried Redis-Rack(給我一個錯誤:在機架應用對象異常NoMethodError(未定義的方法`foreign_key」的零:NilClass ))
沒有什麼似乎在幫助真的......我最終有一個錯誤或我的會話得到重置每個請求。我知道乘客可能使用多個線程,這是會話不起作用的原因,但我似乎無法找到解決問題的方法。
我在這裏錯過了一些明顯的東西嗎?有什麼建議麼?
的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
西納特拉和乘客一起重置生產會議,雖然這並不發展中發生。