ruby-on-rails – 会话可以在Heroku上使用多个web dynos吗?

如果您在Heroku上运行带有多个Web dynos的Rails 3应用程序,

>每次点击应用程序时,您是否通常使用不同的网络动态连接?
>会话可以在不同的网络动态中运行吗?
>它是否适用于不同的Rails会话存储(Actiondispatch :: Session :: CookieStore,
ActiveRecord :: SessionStore和Actiondispatch :: Session :: CacheStore)

解决方法

简而言之 – 会话将适用于多个网络动态.

Sessions可以在Web dynos上运行 – 因为Rail的会话支持设计允许它.如果有的话,web dyno模型正是Rail的横向扩展方式.

1.每次点击应用程序时,您是否通常使用不同的网络dyno连接?

基于heroku文档:

The routing mesh is responsible for determining the location of your application’s web dynos within the dyno manifold and forwarding the HTTP request to one of these dynos. Dyno selection is performed using a random selection algorithm.

所以dyno选择是随机的……但是dyno必须安装你的应用程序.因此,如果您有多个dyno,那么您最终可能会连接到不同的dyno(这很重要,因为这有助于实现负载平衡和高可用性)

2.会话可以跨越不同的网络动态吗?

是.大多数Web堆栈通过执行以下操作来支持会话:

>分配会话ID – 这是一个唯一的ID,通常将其设置为会话cookie,以便浏览器始终将带有任何HTTP请求的id发送给原始主机
>提供将会话ID映射到实际会话数据的存储

因此,通过此过程,可以支持会话,因为每个入站HTTP请求都具有会话ID,当处理您的请求时,Web dyno可以访问该会话ID.

3.它适用于不同的Rails会话存储(Actiondispatch :: Session :: CookieStore,ActiveRecord :: SessionStore和Actiondispatch :: Session :: CacheStore)

Actiondispatch ::会议::的CookieStore
是. cookie存储将加密的会话数据存储为cookie.因此,您的浏览器会将所有会话数据(加密)发送回主机,然后解密,以便在您的应用中使用.

的ActiveRecord :: SessionStore
是. cookie存储将加密的会话数据存储在数据库表中.然后将ID指定为cookie.因此,您的浏览器将ID发送到主机,然后用于从数据库加载会话数据.由于所有Web dynos都与DB连接,这意味着它也受支持.

Actiondispatch ::会议:: CacheStore是的,但您需要缓存存储服务(例如MemCache插件). Cookie存储将加密的会话数据存储在缓存存储(memcache)中,缓存存储是所有Web dynos中的共享服务.然后将ID指定为cookie.因此,然后用于从缓存存储(memcache)加载会话数据.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...