【问题标题】:Can I call route internally?我可以在内部调用路由吗?
【发布时间】:2012-05-23 13:00:55
【问题描述】:

我只将一个文件用于我有路由的 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]
  • 西纳特拉 (1.3.2)
  • sinatra-advanced-routes (0.5.1)
  • sinatra-reloader (0.5.0)

【问题讨论】:

    标签: ruby cron sinatra


    【解决方案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。

    【讨论】:

    • 我更新了我的问题 - 请参阅 my_function()。我只使用一个 sinatra 代码文件 + 一个 haml 文件。然后我有 cron.rb 文件,我目前使用 mechanize 调用我的 sintra 代码。我确信我不必使用机械化,而是在“本地”做所有事情。如何从 cron.rb 调用 my_function?我已经在 sintra.rb 中调用了 my_function。
    • 是的,先生。可能需要一些修补才能正确包含该模块,但这是非常有用的技能,因此值得付出努力。
    猜你喜欢
    • 2020-02-20
    • 2014-10-24
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 2012-02-25
    相关资源
    最近更新 更多