Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails XXX的副本已从模块中删除,但仍处于活动状态_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails XXX的副本已从模块中删除,但仍处于活动状态

Ruby on rails XXX的副本已从模块中删除,但仍处于活动状态,ruby-on-rails,ruby,Ruby On Rails,Ruby,我基本上运行一个后台进程,检查文件,然后根据文件中发现的数据更新rails模型。但是,由于错误,我无法从线程内访问模型 下面是我的例子: def check_logs while @start == 1 results = Dir.glob("#{@path}/*.txt") unless results.empty? results.each do |result| file_name = resu

我基本上运行一个后台进程,检查文件,然后根据文件中发现的数据更新rails模型。但是,由于错误,我无法从线程内访问模型

下面是我的例子:

def check_logs
    while @start == 1
        results = Dir.glob("#{@path}/*.txt")
        unless results.empty?
            results.each do |result|
                file_name = result.split("/")[-1]
                data = File.open(result).read

                if file_name.include? "get"
                    data_contents = data.split("\n")
                    time = data_contents[0]
                    ExamResult.create(time: time)
                end
                FileUtils.rm_rf result
            end
        end

        sleep 5
    end
end

def start_agent
    @start = 1
    Thread.start {check_logs}
end

def stop_agent
   @start = 0
end
但是,当它在后台时,我在控制台上看到的错误是:

异常终止(异常报告为真): 回溯(最近一次呼叫上次):5:from portal/lib/custom\u rb/exam\u results/exam\u custom.rb:69:in
block in
启动\u监视\u代理“4:从
portal/lib/custom\u rb/test\u results/test\u custom.rb:40:in
检查日志' 3:从门户/lib/custom\u rb/exam\u results/exam\u custom.rb:40:in
each'
2:从门户/lib/custom\u rb/exam\u results/exam\u custom.rb:46:in
block 在check_日志“1:来自 /home/nutella/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active\u support/dependencies.rb:202:in
const\u missing'
/home/user/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active\u support/dependencies.rb:496:in
load\u missing\u constant:“ExamResult的副本已从中删除” 模块树,但仍处于活动状态!(错误)

我在这里的目标只是有一个后台流程来监控日志。我已经看到了一些关于同样的错误的帖子,但是也许我可以做得比为他们提供的解决方案好一点


任何想法或反馈都将不胜感激。

我认为提供的错误与上述代码无关。 通常,使用元编程在运行时修改类时会发生此错误


看看您需要的地方,定义
ExamResult
,看起来您在代码中多次需要它。

我不认为提供的错误与上述代码有关。 通常,使用元编程在运行时修改类时会发生此错误


看看您需要的地方,定义
ExamResult
,看起来您在代码中多次需要它。

是的,这是ExamResult提到的唯一功能。如果我删除Thread.start{check_logs},我永远不会得到错误。一开始它似乎工作得很好,但如果我刷新网页,几乎就像我调用该模型的能力消失了一样。这是因为Rails在页面刷新时重新加载模型,而之前指向ExamResult的常数不再可用。我不建议您在Rails应用程序的范围内编写线程化代码。以Sidekiq gem为例。这对你来说是安全的,明白了。我试过sidekiq,但看起来你不能阻止一个sidekiq工人,对吗?例如,这段代码检查一个实例变量,看它是否改变了,如果改变了,它就会停止。但是,我不认为我可以在sidekiq中实现同样的功能。不,您可以在sidekiq worker中实现几乎相同的逻辑。如果满足某些条件,那么您可以从sidekiq作业的
perform
方法返回,它将停止,直到安排下一个作业。作为替代方案,您可以尝试gem,它是为编写长期运行的应用程序和服务器而构建的。当然可以my_object.reload'应该从数据库中提取更改的属性。是的,这是ExamResult提到的唯一一个函数。如果我删除Thread.start{check_logs},我永远不会得到错误。一开始它似乎工作得很好,但如果我刷新网页,几乎就像我调用该模型的能力消失了一样。这是因为Rails在页面刷新时重新加载模型,而之前指向ExamResult的常数不再可用。我不建议您在Rails应用程序的范围内编写线程化代码。以Sidekiq gem为例。这对你来说是安全的,明白了。我试过sidekiq,但看起来你不能阻止一个sidekiq工人,对吗?例如,这段代码检查一个实例变量,看它是否改变了,如果改变了,它就会停止。但是,我不认为我可以在sidekiq中实现同样的功能。不,您可以在sidekiq worker中实现几乎相同的逻辑。如果满足某些条件,那么您可以从sidekiq作业的
perform
方法返回,它将停止,直到安排下一个作业。作为替代方案,您可以尝试gem,它是为编写长期运行的应用程序和服务器而构建的。当然可以my_object.reload'应该从数据库中提取更改的属性。您在使用spring吗?您在使用spring吗?