Sinatra를 사용하여 Ruby에서 웹 응용 프로그램을 작성했습니다. 개발 중에는 세션에 많은 문제가 없었습니다. 그러나 이제는 실제로 응용 프로그램을 배포하기 위해 승객을 소환하고 있습니다. 세션 데이터가 계속해서 '재설정'되는 것과 관련하여 많은 문제가 있습니다.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
그것은 그냥 랙 :: 세션 : 수영장, Memcache의 또는 레디 스를 사용한 경우에 따라 다른 형태를 가지고 있었다
config.ru. 이것은 하나의 I는 레디 스 사용 하나였다
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이되지 않지만 승객 함께 생산 세션 재설정 개발 중에있다.