Ruby在Sinatra框架中的Rufus调度器应用中如何使用?

更新于
2026-10-09 21:56:27
1阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计596个文字,预计阅读时间需要3分钟。

Ruby在Sinatra框架中的Rufus调度器应用中如何使用?

在Sinatra应用中使用Rufus调度程序。能否从scheduler do块中访问辅助方法?我没有实现这一点(我得到一个未定义的方法:Object错误,检查:Object)。因此,我现在必须如何在scheduler 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

话虽如此,您将无法访问这样的调度程序,因此:

Ruby在Sinatra框架中的Rufus调度器应用中如何使用?

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

一切都非常复杂!您可以混合搭配,找到适合您需求的产品.

本文共计596个文字,预计阅读时间需要3分钟。

Ruby在Sinatra框架中的Rufus调度器应用中如何使用?

在Sinatra应用中使用Rufus调度程序。能否从scheduler do块中访问辅助方法?我没有实现这一点(我得到一个未定义的方法:Object错误,检查:Object)。因此,我现在必须如何在scheduler 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

话虽如此,您将无法访问这样的调度程序,因此:

Ruby在Sinatra框架中的Rufus调度器应用中如何使用?

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

一切都非常复杂!您可以混合搭配,找到适合您需求的产品.