В приложении Sinatra на Heroku сеанс не разделяется между Dynos - PullRequest
12 голосов
/ 24 мая 2011

Что имеет смысл.Но каковы некоторые обходные пути для этой проблемы?

Ответы [ 3 ]

24 голосов
/ 26 мая 2011

В своем комментарии я предложил использовать сеансы на основе файлов cookie в стойке , но, глядя на это, сеансы Sinatra в любом случае сеансы файлов cookie в стойке.

Если посмотреть дальше,Я обнаружил это в документации Sinatra :

Для повышения безопасности данные сеанса в файле cookie подписываются секретом сеанса.Случайный секрет генерирует для вас Синатра.Однако, поскольку этот секрет будет меняться при каждом запуске вашего приложения, вы можете установить его самостоятельно, поэтому все экземпляры вашего приложения делятся им:

set :session_secret, 'super secret'

Таким образом, кажется, что каждый динамо Heroku генерирует свой ключ, и поэтому не может читать файлы cookie сеанса друг друга, и вам нужно указать ключ, чтобы каждый динамо использовал один и тот же.

Скореечем добавлять секретный ключ к исходному коду, вам, вероятно, лучше установить переменную окружения :

$ heroku config:add SESSION_KEY=a_longish_secret_key

Затем в приложении sinatra:

enable :sessions
set :session_secret, ENV['SESSION_KEY']
1 голос
/ 21 ноября 2011

Вы также можете использовать Memcached сеанс для производительности или безопасности. Не пробовал, но выглядел легко. 5MB бесплатно на герою.

0 голосов
/ 20 сентября 2013
# In your app.rb file just add following - 
enable :sessions
set :session_secret, "some_random_value" 
...