这可能是一个愚蠢的问题,但我只是想知道在哪里,或者是否可能运行一个与我想要运行的rails应用程序无关的ruby脚本。为了澄清,我正在研究自动化测试套件主要用bash编写,但我想创建一个前端(我的rails应用程序),允许其他用户不通过命令行运行自动化测试。所以我想基本上我希望用户从数据库或表单字段中选择某些参数,然后获取这些参数并将它们传递给调用我的bash自动化脚本的ruby脚本。 我希望这很清楚。谢谢!
答案 0 :(得分:2)
如果你想从rails应用程序调用脚本,它会变得复杂。您可能希望使用后台作业或某种队列来运行这些作业,因为它们会阻止服务器,您的用户将等待调用完成并加载结果,很可能会超时。
参见delayed_job 你可能想尝试在ruby中创建一个可以与你的应用程序连接的小包装器脚本。
祝你好运!答案 1 :(得分:2)
对于简短任务,您应该使用system
或popen
当任务较长时,如果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