在rails应用程序中运行ruby脚本

时间:2011-05-25 22:33:21

标签: ruby-on-rails

这可能是一个愚蠢的问题,但我只是想知道在哪里,或者是否可能运行一个与我想要运行的rails应用程序无关的ruby脚本。为了澄清,我正在研究自动化测试套件主要用bash编写,但我想创建一个前端(我的rails应用程序),允许其他用户不通过命令行运行自动化测试。所以我想基本上我希望用户从数据库或表单字段中选择某些参数,然后获取这些参数并将它们传递给调用我的bash自动化脚本的ruby脚本。 我希望这很清楚。谢谢!

4 个答案:

答案 0 :(得分:2)

如果你想从rails应用程序调用脚本,它会变得复杂。您可能希望使用后台作业或某种队列来运行这些作业,因为它们会阻止服务器,您的用户将等待调用完成并加载结果,很可能会超时。

参见delayed_job 你可能想尝试在ruby中创建一个可以与你的应用程序连接的小包装器脚本。

祝你好运!

答案 1 :(得分:2)

对于简短任务,您应该使用systempopen

当任务较长时,如果delayed_job

,则仍然需要它们

答案 2 :(得分:1)

您可以在rails应用的根目录中的脚本文件夹中添加脚本。像这样开始你的脚本:

你的脚本可以[在这里命名] .rb

我们在环境中加载的原因是我们可以在脚本中使用rails模型和rails相关的东西:

#!/bin/env ruby

ENV['RAILS_ENV'] = "production" # Set to your desired Rails environment name
require '/[path to your rails app on your server]/config/environment.rb'
require 'active_record'

如果要在服务器上运行此功能,则必须在服务器上编辑crontab。或者你可以使用随时随地的宝石(我遇到了麻烦,但整个宇宙都没有)。相反,如果你有heroku,那么heroku调度程序可以简化运行脚本。

答案 3 :(得分:0)

您可以使用rails runner运行Ruby代码。

  

...让我们假设您有一个名为“报告”的模型。 Report模型有一个名为generate_rankings的类方法,您可以使用

从命令行调用它
$ rails runner 'Report.generate_rankings'
     

由于我们可以访问所有Rails,我们甚至可以使用Active Record finder方法从我们的应用程序中提取数据。

$ rails runner 'User.pluck(:email).each { |e| puts e }'
charles.quinn@highgroove.com
me@seebq.com
bill.gates@microsoft.com
obie@obiefernandet.com

The Rails 5 WayObie Fernandez获取的示例。