我可以在内部呼叫路由吗?

时间:2012-05-16 00:19:33

标签: ruby cron sinatra

我只使用一个文件进行sinatra应用程序( sinatra.rb ),我有一条路线:

get '/ajax2?' do
  my_function()
end

我可以从另一个ruby脚本(cron.rb)和传递所有参数来调用my_function()吗?因此,如果我从浏览器访问它,那么此路由中的代码执行方式是否相同?

我需要从cron工作中调用它。

  • ruby​​ 1.8.7(2010-08-16 patchlevel 302)[i386-mingw32]
  • sinatra(1.3.2)
  • sinatra-advanced-routes(0.5.1)
  • sinatra-reloader(0.5.0)

1 个答案:

答案 0 :(得分:1)

<强>更新

非常确定你需要的是一个模块,就像这样,在 my_module.rb

module MyModule
  def my_function
  end
end

然后在 app.rb

require './my_module.rb'
helpers MyModule

您可以在cron.rb中要求并包含该模块


如果我正确地按照您的问题(不确定),请将您的代码拉出到扩展名中,这样您的目录结构如下所示:

myapp/
|-lib/
  |-my_extension.rb
|-app.rb

然后在 my_extension.rb

module Sinatra
  module MyExtension
    def self.registered(app)
      app.get '/ajax2?' do
        "hallo"
      end
    end
  end
  register MyExtension
end

并在 app.rb 中,您只需要:

require './lib/my_extension.rb'

这是第一步,然后将扩展内容移动到gem中,您可以在任何sinatra应用程序中的Gemfile中使用gem。