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

背景介绍:定义了一个/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,会发现他们不是同一个,所以值自然不能互相传递。

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

你可能感兴趣的:(ruby,on,rails,ruby,on,rails)