为什么同一个ruby文件中无法传送变量

本文记录了在Ruby中,由于进程独立性导致的变量无法在不同方法间共享的问题。在_/root/haiyu/jenkins.rb_文件中,_prepare_start_方法定义了变量@testu,但在_run_方法中该变量值变为nil。原因在于两个方法运行在不同的进程中,因此无法直接传递变量。为了解决这个问题,作者建议使用数据库来存储和传递变量值。
摘要由CSDN通过智能技术生成

背景介绍:定义了一个/root/haiyu/jenkins.rb 文件,用来控制jenkins的相关操作,其中定义了两个方法:_prepare_start和_run

在_prepare_start里定义了一个变量 @testu,并且可以保证_prepare_start会运行在_run之前,但是在_run里面怎么也得不到@testu。

原因很简单,但是有时候很容易忽略。略记一下,谨防犯傻的你~

in /haiyu/jenkins.rb
   29:
   30:   def _prepare_start(task = nil, user=nil)
   31:     byebug
   32:     @user = user
   33:     @testu="test"
=> 34:     task.started! if task.prepared? or task.error?
   35:   end
   36:
(byebug) @testu
"test"
37:   def _run(task = nil)
   38:     byebug
=> 39:     u=@testu
   40:     puts u
   41:     jenkins_project = JenkinsProject.find(task.settings[:project])
   42:     jenkins_job = jenkins_project.jenkins_jobs.new(reference: task, parameters: jenkins_project.process_jenkins_parameters(task.jenkins_parameters))
   43:     jenkins_job.save
(byebug) @testu
nil

原因是:他们是独立的进程,在byebug的地方查看self.object_id,会发现他们不是同一个,所以值自然不能互相传递。

解决方法可以通过数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值