gpt4 book ai didi

ruby-on-rails - 在 Rails 应用程序中初始化 DRb 服务的正确位置在哪里?

转载 作者:数据小太阳 更新时间:2023-10-29 08:56:04 25 4
gpt4 key购买 nike

我在 Rails 应用程序中使用 DRb 来卸载 Rails 进程之外的昂贵任务。在使用 DRbObject.new 初始化客户端 stub 之前,有必要使用 DRb.start_service 初始化 DRb 服务。

在模型或 Controller 中执行此操作似乎会使线程处于不确定状态。当我退出 mongrel 时,它说:

由于“关闭”,为慢速工作人员获取 1 个线程
等待 1 个请求完成,可能需要 60 秒。

在 environment.rb 中初始化服务似乎工作正常,但有一个很大的警告:我也在一些 Rails 工作人员中使用 backgroundrb。当他们初始化时,他们运行 environment.rb 并由于双重初始化再次导致问题。

客户端调用DRb.start_service的正确位置在哪里?或者,有没有一种方法可以测试初始化​​,这样我就可以避免为同一进程执行两次初始化?

最佳答案

以下代码将检查主服务器是否已经处于事件状态以避免双重初始化。可以通过将 DRb 线程移动到不同于 mongrel 正在使用的线程组来避免 mongrel 在退出时挂起。

    # start DRb service if it hasn't been started before
begin
DRb.current_server
rescue DRb::DRbServerNotFound
DRb.start_service
# move to different ThreadGroup to avoid mongrel hang on exit
ThreadGroup.new.add DRb.thread
end

在使用该类之前(而不是在 environment.rb 中)运行它产生了最好的结果,并且似乎可以很好地与 backgroundrb 一起工作。

关于ruby-on-rails - 在 Rails 应用程序中初始化 DRb 服务的正确位置在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/299219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com