Ruby on rails 如何手动运行Rails控制器操作(“脱机”)?

Ruby on rails 如何手动运行Rails控制器操作(“脱机”)?,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我需要一种方法来手动“脱机”运行控制器操作并存储结果输出 在控制器初始化方面,似乎没有什么有趣的事情发生 查看send\u action,似乎在调用此操作时,控制器实例已经对该操作了解很多!(例如,@\u action\u name,@\u env,etv…已设置!) 我需要了解这是在哪里发生的,这样我就可以在控制器实例中手动执行。我从来没有完全弄清楚如何导航像Rails那样动态的代码,似乎也无法找到这种设置发生在哪里。我在一些地方使用了caller来理解如何调用操作,但还没有找到我要查找的代码

我需要一种方法来手动“脱机”运行控制器操作并存储结果输出

在控制器初始化方面,似乎没有什么有趣的事情发生

查看
send\u action
,似乎在调用此操作时,控制器实例已经对该操作了解很多!(例如,
@\u action\u name
@\u env
,etv…已设置!)

我需要了解这是在哪里发生的,这样我就可以在控制器实例中手动执行。我从来没有完全弄清楚如何导航像Rails那样动态的代码,似乎也无法找到这种设置发生在哪里。我在一些地方使用了
caller
来理解如何调用操作,但还没有找到我要查找的代码


非常感谢您的帮助。

我想脱机运行的意思是,通过rails控制台中的代码或某种库或模型来运行它

您可以使用以下命令访问控制器信息:

ActionDispatch::Integration::Session.new(Rails.application)

这将创建一个新会话(类似于集成测试会话),您可以在其中执行对rails应用程序的请求

您以以下方式向您的操作/控制器执行请求:

会话。获取(路径)

要捕获输出,可以使用
会话.response
中的值存储,如果要获取正文,可以使用:
会话.response.body

例如:

假设您有以下控制器:

# app/controllers/tests_controller.rb

class TestsController < ApplicationController
  layout false
  def index
    @name = 'Test'
  end
end
您可以创建以下文件:

# run.rb
session = ActionDispatch::Integration::Session.new(Rails.application)
path = Rails.application.routes.url_helpers.tests_path
session.get(path)
puts session.response.body

并通过以下方式运行它:
rails runner run.rb
,您应该得到“Test”

我想脱机运行的意思是,通过rails控制台中的代码或某种库或模型来运行它

您可以使用以下命令访问控制器信息:

ActionDispatch::Integration::Session.new(Rails.application)

这将创建一个新会话(类似于集成测试会话),您可以在其中执行对rails应用程序的请求

您以以下方式向您的操作/控制器执行请求:

会话。获取(路径)

要捕获输出,可以使用
会话.response
中的值存储,如果要获取正文,可以使用:
会话.response.body

例如:

假设您有以下控制器:

# app/controllers/tests_controller.rb

class TestsController < ApplicationController
  layout false
  def index
    @name = 'Test'
  end
end
您可以创建以下文件:

# run.rb
session = ActionDispatch::Integration::Session.new(Rails.application)
path = Rails.application.routes.url_helpers.tests_path
session.get(path)
puts session.response.body

并通过:
rails runner run.rb
运行它,您应该获得“测试”

-这就是您要寻找的吗?@SergeySokolov,用于渲染。它假设我已经在控制器操作中,或者有控制器操作的结果。很抱歉问我确信这是一个幼稚的问题,但是手动“脱机”运行控制器操作意味着什么?@jvillian我正在创建一个类似于延迟动作gem提供的框架。其目的是让我的开发团队可以编写一个计算时间较长的操作(这会导致超时)。相反,对他们来说是透明的,他们的操作将异步运行和呈现,而呈现状态页。状态页面将监视异步结果,并在准备就绪时显示它。如果我理解您所描述的内容(当然,我可能不理解),那么我们会一直这样做(我想)。一个动作被称为。该操作启动后台作业并返回json数据,该数据允许呈现页面检查状态(状态页面使用js执行此操作)。完成后,状态页面进行调用(再次使用js),返回呈现的结果。然后,“状态”页面显示这些结果。像这样的吗这就是你要找的吗?@SergeySokolov,那是渲染用的。它假设我已经在控制器操作中,或者有控制器操作的结果。很抱歉问我确信这是一个幼稚的问题,但是手动“脱机”运行控制器操作意味着什么?@jvillian我正在创建一个类似于延迟动作gem提供的框架。其目的是让我的开发团队可以编写一个计算时间较长的操作(这会导致超时)。相反,对他们来说是透明的,他们的操作将异步运行和呈现,而呈现状态页。状态页面将监视异步结果,并在准备就绪时显示它。如果我理解您所描述的内容(当然,我可能不理解),那么我们会一直这样做(我想)。一个动作被称为。该操作启动后台作业并返回json数据,该数据允许呈现页面检查状态(状态页面使用js执行此操作)。完成后,状态页面进行调用(再次使用js),返回呈现的结果。然后,“状态”页面显示这些结果。像这样的?