ruby-on-rails - 如何检测 Rails 应用程序是否在 Unicorn 下运行?

标签 ruby-on-rails unicorn

我需要在我的 Rails 应用程序中设置到外部服务的连接。我在初始化程序中执行此操作。问题是服务库使用线程传递(我需要它,因为我不能让它阻塞请求),但是 Unicorn 生命周期导致线程被杀死并且工作人员永远不会看到它。一种解决方案是对每个请求调用一个新连接,但这是不必要的浪费。

最佳解决方案是在 unicorn 配置中的 after_fork 块中设置连接。问题在于它不会在 unicorn 之外被调用,这意味着我们无法在开发/测试环境中对其进行测试。

所以问题是,确定 Rails 应用程序是否在 Unicorn(主进程或工作进程)下运行的最佳方法是什么?

最佳答案

Rails中有一个可以访问的环境变量(我知道它存在于3.0和3.1中),检查env['SERVER_SOFTWARE']的值.您可以将正则表达式或字符串与该值进行比较,以确定您正在运行的服务器。

我的管理员中有一个模板,它通过 env 变量并吐出其内容。

unicorn 4.0.1

env['SERVER_SOFTWARE'] => "Unicorn 4.0.1"

rails 服务器 (webrick)
env['SERVER_SOFTWARE'] => "WEBrick/1.3.1 (Ruby/1.9.3/2011-10-30)"

关于ruby-on-rails - 如何检测 Rails 应用程序是否在 Unicorn 下运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8059188/

相关文章:

mysql - 连接rails中现有的MySQL数据库

ruby-on-rails - 为什么我的 Upstart Unicorn Rails 服务器出现错误 "rackup file (config.ru) not readable"

ruby-on-rails - Capistrano 3. shared_pa​​th 变量中的错误路径

bundler - 使用 bluepill 监控 bundle 执行 unicorn_rails

ruby-on-rails - 当我进行捆绑安装时,我收到了 kgio gem 的 gem 安装错误

ruby-on-rails - 计算数组元素之间的差异

ruby-on-rails - 在 Rails 应用程序中减少数据库查询的技术

ruby-on-rails - rails : validate PayPal email?

ruby-on-rails - rails : Order with nulls last

ruby-on-rails - Rails 的 *_url 助手在生产中使用自定义(不是 80)端口。 (Nginx, unicorn )