Ruby rails在开发模式下通过请求持久化对象
我正在尝试与rails应用程序中的Matlab.Application.Single win32ole对象交互。我遇到的问题是,在开发应用程序时,每个单独的请求都会重新加载我的win32ole对象,因此我会断开与matlab原始实例的连接,并生成新实例。有没有办法在rails中的请求之间持久化活动对象?或者有没有办法重新连接到我的Matlab.Application.Single实例 在生产模式下,我使用模块变量来存储请求之间的连接,但在开发模式下,每个请求都会重新加载模块变量 下面是我的代码片段Ruby rails在开发模式下通过请求持久化对象,ruby,object,request,Ruby,Object,Request,我正在尝试与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实例——根据需要旋转新实例,关闭不再使用的旧实例。非常感谢,我正试着投票支持你的答案,但我需要我想先多获得几点声誉积分。等我拿到这些积分后,我会回来给你应得的积分。再次感谢。