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)加载会话数据.

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...