我正在尝试与我的 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')