【问题标题】:Ruby on Rails - Can I call a Controller:Method from a batch routine in windows?Ruby on Rails - 我可以从 Windows 中的批处理例程中调用 Controller:Method 吗?
【发布时间】:2013-02-03 04:33:01
【问题描述】:

我对在 Windows 上工作的 RoR 比较陌生。我在 Rails 中构建了一个使用 ActionMailer 发送电子邮件的简单应用程序。我想向我的 Windows 调度程序添加一个任务,以运行一个批处理例程,该例程在我的控制器内部调用我的电子邮件方法。当我这样做时,网络应用程序将不会运行,所以我不能做 CURL 或类似的事情。有没有办法运行带有一些参数的 Ruby.exe 来启动 Rails 应用程序(类似于 irb)并调用控制器:方法?

更新:我接受了我标记为正确答案中的建议,但我想我会详细说明,以防像我这样的 RoR 新手需要更多指导。

  1. 我创建了一个文件夹 app\classes 并为我的班级创建了一个 .rb 文件
  2. 我必须创建一个初始化方法来处理一些设置
  3. 创建了一些简单的返回变量的方法
  4. 我确保我可以在 rails 控制台中运行这些步骤
  5. 使用以下代码在 lib\tasks 中创建了一个文件
  6. 在项目文件夹中的 DOS 中运行这个 - rake runMe --trace

    task :runMe => :environment do
    
        @s = ScrapeTools.new
    
        @bears = @s.getBears
    
        @bulls = @s.getBulls
    
        UserMailer.stock_email(@bears,@bulls).deliver
    
    end
    

如果您发现任何错误,请告诉我

【问题讨论】:

    标签: ruby-on-rails ruby windows command-line scheduled-tasks


    【解决方案1】:

    有。 rails runner <path to script> 将在您的 Rails 应用程序下运行给定的脚本。 Have some docs

    【讨论】:

    • 所以我的控制器在这里定义 class WelcomeController eval': undefined method stocks' for WelcomeController:Class (NoMethodError) 有什么想法吗??
    • @user1108728。问题是 stock 是 WelcomeController 的实例方法,而不是类方法。您需要一个控制器实例,而您不想这样做。请参阅我上面的回复以避免这一切。
    • 您上面的回复说要使用 rails runner,我以为我是这样做的?不知道实例方法和类方法的区别,有没有更好的日子来定义股票?
    • @user1108728。很抱歉造成混乱。我的回应是 boulder (me) 的回应,建议将代码重构为模块。并且fyi,类方法相当于其他语言中的静态方法,WelcomeController类的方法,而实例方法是WelcomeController实例的方法。同样,通过将代码移出控制器来避免所有这些。
    【解决方案2】:

    这是一个很好的例子,说明了为什么您不想将逻辑放入控制器中。比将该功能放在控制器方法中要好得多,将其重构为模块或类中的方法。然后,您从控制器以及直接在批处理例程中执行的 rake 任务调用该方法。

    【讨论】:

    • 如果我把它放在一个模块中,如果从一个 rake 任务我将如何调用?
    • 让 rake 任务需要环境(参见stackoverflow.com/questions/4482967/…)。然后,您可以像从控制器中一样调用应用程序中可用的任何方法。例如MyModule.my_method(args) 如果您将 my_method 定义为 MyModule 的“类方法”
    • 有趣的是,当它是正确(并且被接受)的答案时,它被否决了。
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 2013-01-07
    • 2014-10-08
    • 2015-07-20
    相关资源
    最近更新 更多