在Heroku的Sinatra应用程序中,会话不是跨越Dynos共享的

时间:2011-05-24 18:33:40

标签: ruby-on-rails ruby heroku sinatra

哪个有道理。但是对于这个问题,有哪些首选的工作方法呢?

2 个答案:

答案 0 :(得分:24)

在我的评论中,我建议使用rack cookie based sessions,但仔细研究一下,无论如何,Sinatra会话都是机架cookie会话。

进一步展望,我found this in the Sinatra docs

  

为了提高安全性,cookie中的会话数据使用会话密钥进行签名。 Sinatra为您生成一个随机秘密。但是,由于这个秘密会随着应用程序的每次启动而改变,您可能希望自己设置秘密,因此所有应用程序实例都共享它:

     
    

set :session_secret, 'super secret'

  

所以似乎每个Heroku dyno都会生成一个不同的密钥,因此无法读取每个其他会话cookie,并且您需要指定一个密钥,以便每个dyno使用相同的密钥。

您可能最好设置environment variable,而不是在源代码中添加密钥:

$ heroku config:add SESSION_KEY=a_longish_secret_key

然后在你的sinatra应用程序中:

enable :sessions
set :session_secret, ENV['SESSION_KEY']

答案 1 :(得分:0)

# In your app.rb file just add following - 
enable :sessions
set :session_secret, "some_random_value"