#session #sinatra #shotgun
#сеанс #sinatra #shotgun
Вопрос:
Возьмите этот код (модульное приложение Sinatra)
#application_controller.rb
require 'sinatra/base'
require "sinatra/activerecord"
require 'bcrypt'
require "sysrandom/securerandom"
include BCrypt
enable :sessions
class Application < Sinatra::Base
post '/identifier' do
user = User.find_by_email(params['email'])
if user amp;amp; user.authenticate(params[:password])
session[:babyami] = user.prenom
puts "after identification: #{session[:babyami]}"
redirect to '/'
else
erb :'principal/identifier'
end
end
get '/' do
puts "at root: #{session[:babyami]}"
end
и в консоли, при использовании shotgun :
== Shotgun/Thin on http://127.0.0.1:9393/
D, [2020-12-02T08:48:30.672731 #8992] DEBUG -- : User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."email" = $1 LIMIT $2 [["email", "moshe.man@gmail.com"], ["LIMIT", 1]]
after identification : Moshe
127.0.0.1 - - [02/Dec/2020:08:48:30 0100] "POST /identifier HTTP/1.1" 303 - 0.2239
at root:
127.0.0.1 - - [02/Dec/2020:08:48:31 0100] "GET / HTTP/1.1" 200 - 0.0045
Но это работает, когда я использую rackup!
$ rackup
2020-12-02 08:51:46 0100 Thin web server (v1.8.0 codename Possessed Pickle)
D, [2020-12-02T08:52:11.639346 #9165] DEBUG -- : User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."email" = $1 LIMIT $2 [["email", "moshe.man@gmail.com"], ["LIMIT", 1]]
after identification : Moshe
::1 - - [02/Dec/2020:08:52:11 0100] "POST /identifier HTTP/1.1" 303 - 0.2519
at root: Moshe
::1 - - [02/Dec/2020:08:52:11 0100] "GET / HTTP/1.1" 200 - 0.0009
Есть ли причина, по которой сеансы работают корректно при запуске rackup, но не при использовании shotgun? Как правильно включить сеансы с помощью shotgun?
Ответ №1:
Может ли это быть полезным.
shutgun перезапускает сервер при каждом запросе, поэтому сеанс теряется. Обходной путь — установить переменную ENV, как описано здесь: sinatra docs (не забудьте перезагрузиться)
и требует, чтобы этот секрет в приложении был таким:
enable :sessions
set :session_secret, ENV.fetch('SESSION_SECRET') { SecureRandom.hex(64) }
Смотрите также Здесь: обсуждение в Google