在Heroku的Sinatra应用程序中,会话不是跨越Dynos共享的
这是有道理的。 但对于这个问题,有哪些首选的工作方法呢?
在我的评论中,我建议使用基于机架cookie的会话 ,但是看一下,Sinatra会话无论如何都是 Rack cookie会话。
再往前看 ,我在Sinatra文档中发现了这一点 :
为了提高安全性,cookie中的会话数据使用会话密钥进行签名。 Sinatra为您生成一个随机秘密。 但是,由于此秘密会随着应用程序的每次启动而改变,您可能希望自己设置秘密,因此所有应用程序实例都共享它:
set :session_secret, 'super secret'
因此,似乎每个Heroku dyno都会生成不同的密钥,因此无法读取每个其他会话cookie,并且您需要指定一个密钥,以便每个dyno使用相同的密钥。
您可能更好地设置环境变量 ,而不是在源代码中添加密钥。
$ heroku config:add SESSION_KEY=a_longish_secret_key
然后在你的sinatra应用程序中:
enable :sessions set :session_secret, ENV['SESSION_KEY']
您还可以使用memcached会话来提高性能或安全性。 没试过但看起来很简单。 在heroku上免费5MB。
# In your app.rb file just add following - enable :sessions set :session_secret, "some_random_value"
- ActionView :: Template :: Error(960.css未预编译)
- 设计omniauth-facebook redirect_uri不是绝对的URI
- 跟踪heroku上的应用程序内存使用情况
- 我如何告诉Sinatra它是什么环境(开发,测试,生产)?
- Rails,Heroku,Unicorn&Resque – 如何选择网络工作者/ resque工作者的数量?
- Heroku推被拒绝,铁路依赖冲突? Ruby on Rails教程第1.4.2节
- 致命的:不是git存储库(或任何父目录):。git
- Javascript没有在heroku上加载
- Rails 4资产管道不会使用asset_path引用其他资产来覆盖资产