ruby – 在Sinatra的Rufus调度程序
发布时间:2020-12-17 01:26:12 所属栏目:百科 来源:网络整理
导读:我在Sinatra应用程序中使用Rufus调度程序. 我可以从“scheduler do”块中访问辅助方法吗?我没有设法做到这一点(我得到一个“未定义的方法`检查’为main:Object”错误)所以现在我必须在helpers块中定义方法(在“post”/“do”块中使用它也)然后将方法的主体
我在Sinatra应用程序中使用Rufus调度程序.
我可以从“scheduler do”块中访问辅助方法吗?我没有设法做到这一点(我得到一个“未定义的方法`检查’为main:Object”错误)所以现在我必须在helpers块中定义方法(在“post”/“do”块中使用它也)然后将方法的主体复制到调度程序块.它没有意义:(有没有办法避免重复?我可以在其他地方定义一个方法并在调度程序中调用它吗? 解决方法
这取决于您的调度程序的使用位置.一个块可以访问它本地的上下文,所以如果你在某个地方使用它,你可以访问一个帮助器,那么它也应该可以访问帮助器.
部分取自the docs class MyApp < Sinatra::Base # Hey,I'm in the application scope! helpers do def my_helper end end configure do scheduler.every('20s') do # my_helper is ***not*** accessible here end end get '/define_route/:name' do # Request scope for '/define_route/:name' scheduler.every('20s') do my_helper # my_helper is accessible here end end end 话虽如此,您将无法访问这样的调度程序,因此: configure do set :scheduler,{ Rufus::Scheduler.start_new } end 然后你就可以做到 get '/define_route/:name' do # Request scope for '/define_route/:name' settings.scheduler.every('20s') do my_helper # my_helper is accessible here end end 或者你可以将它放在模块的类实例变量中: module MyScheduler def self.scheduler @scheduler ||= Rufus::Scheduler.start_new end end 然后您可以通过以下方式访问调度程序: MyScheduler.scheduler 但my_helper仍然只能在请求范围内访问.如果要将方法作为帮助程序访问并在请求范围之外,则将其提取为jmettraux隐含于: module MyHelpers def self.my_helper # do something end end 在西纳特拉: helpers def my_helper MyHelpers.my_helper end end 那么可以做到: configure do scheduler = Rufus::Scheduler.start_new set :scheduler,scheduler scheduler.every('20s') do MyHelpers.my_helper # my_helper is not accessible here # but the MyHelpers.my_helper is,because it's accessible everywhere end end # and/or get "another-route" do setting.scheduler.every('20s') do my_helper # my_helper is accessible here end end 一切都非常复杂!您可以混合搭配,找到适合您需求的产品. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |