我需要在我的 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/