Ruby rails在开发模式下通过请求持久化对象

Ruby rails在开发模式下通过请求持久化对象,ruby,object,request,Ruby,Object,Request,我正在尝试与rails应用程序中的Matlab.Application.Single win32ole对象交互。我遇到的问题是,在开发应用程序时,每个单独的请求都会重新加载我的win32ole对象,因此我会断开与matlab原始实例的连接,并生成新实例。有没有办法在rails中的请求之间持久化活动对象?或者有没有办法重新连接到我的Matlab.Application.Single实例 在生产模式下,我使用模块变量来存储请求之间的连接,但在开发模式下,每个请求都会重新加载模块变量 下面是我的代码片

我正在尝试与rails应用程序中的Matlab.Application.Single win32ole对象交互。我遇到的问题是,在开发应用程序时,每个单独的请求都会重新加载我的win32ole对象,因此我会断开与matlab原始实例的连接,并生成新实例。有没有办法在rails中的请求之间持久化活动对象?或者有没有办法重新连接到我的Matlab.Application.Single实例

在生产模式下,我使用模块变量来存储请求之间的连接,但在开发模式下,每个请求都会重新加载模块变量

下面是我的代码片段

require 'win32ole'

module Calculator
  @engine2 = nil
  @engine3 = nil

  def self.engine2
    if @engine2.nil?
      @engine2 = WIN32OLE.new("Matlab.Application.Single")
      @engine2.execute("run('setup_path.m')")
    end
    @engine2
  end

  def self.engine3
    if @engine3.nil?
      @engine3 = WIN32OLE.new("Matlab.Application.Single")
      @engine3.execute("run('setup_path.m')")
    end
    @engine3
  end

  def self.load_CT_image(file)
    Calculator.engine2.execute("spm_image('Init','#{file}')")
  end

  def self.load_MR_image(file)
    Calculator.engine3.execute("spm_image('Init','#{file}')")
  end
end
然后,我可以在控制器中使用我的代码,如下所示:

Calculator.load_CT_image('Post_Incident_CT.hdr')
Calculator.load_MR_image('Post_Incident_MRI.hdr')

您可以将应用程序范围的对象保持在一个常量中,而不会为每个请求重置该常量。将其添加到
config/initializers/
中的新文件中:

ENGINE_2 = WIN32OLE.new("Matlab.Application.Single")
您可能还需要在此处包含
.execute(“run('setup\u path.m')”)
行(我不熟悉WIN32OLE)。然后,您可以将该对象分配给
计算器
模块中的实例变量(只需将
WIN32OLE.new(“Matlab.Application.Single”)
调用替换为
引擎_2
,或者直接引用它们即可


我知道这超出了你的问题范围,但是你这里有很多重复的代码,你可能想创建一个类或模块来管理你的Matlab实例——根据需要旋转新实例,关闭不再使用的旧实例。

非常感谢,我正试着投票支持你的答案,但我需要我想先多获得几点声誉积分。等我拿到这些积分后,我会回来给你应得的积分。再次感谢。