【问题标题】:Is global variables are shared between instances? Ruby on rails + Unicorn + Nginx全局变量是否在实例之间共享? Ruby on rails + Unicorn + Nginx
【发布时间】:2016-01-28 22:10:17
【问题描述】:

我们有一个单一的 RoR 应用程序,其中我们使用了一个全局变量。

当我们尝试来自多个浏览器的HTTP 请求时,在几分之一秒内它会收到nil,几秒钟后再次刷新它会充满值。

不确定这里发生了什么,全局变量是否在多个 HTTP 请求之间共享,并且由于那里产生延迟?

如果我能获得更多关于全局变量的详细信息会更有帮助。

【问题讨论】:

  • 您使用的是哪个全局变量?是 ruby​​ 全局变量 $ 还是 ENV 变量还是 Thread 变量?
  • 另外,您如何为您的 RoR 应用程序提供服务?特别是,您是否有游泳池,例如Passenger 的PassengerMaxPoolSize?可以想象,您的一个进程的全局正在设置,而另一个进程没有...
  • @AnilMaurya -ruby 全局变量

标签: ruby-on-rails ruby nginx global-variables unicorn


【解决方案1】:

几秒钟后再次刷新它会充满值。

这可能与您等待几秒钟的事实无关。如果刷新浏览器时有任何变化,nginx 会将您的请求转发到与之前的请求不同的 Ruby 进程。

全局变量只在同一个进程中是全局的 - 如果你正在运行 2 个 Ruby 进程,并且在第一个进程中设置了一个全局变量,那么第二个进程就不会看到这个。

如果你真的想在多个进程之间共享数据,使用数据库是标准的方式。

【讨论】:

  • 实际上我不想在进程之间共享数据。我面临的主要问题是我的 ruby​​ 全局变量突然得到nil。关于如何追踪它的任何提示?
  • 这是因为默认情况下 unicorn 会为您启动多个进程。你不能使用全局变量,因为你不知道你的请求会命中哪个进程。
  • 如果您想调整独角兽工人的数量,请阅读此处。 digitalocean.com/community/tutorials/… 如果您将其设置为 1,您的代码应该以降低性能为代价,因为您只有一个进程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
相关资源
最近更新 更多