簡體   English   中英

在 Rails 應用程序中運行 ruby 腳本

[英]run ruby script in rails application

這可能是一個愚蠢的問題,但我只是想知道在哪里,或者是否可以運行 ruby 腳本,該腳本與我希望在其中運行的 rails 應用程序無關。澄清一下,我正在開發一個自動化測試套件主要用 bash 編寫,但我想創建一個前端(我的 rails 應用程序),允許其他用戶不通過命令行運行自動化測試。 所以我想基本上我希望用戶從數據庫或表單字段中獲取 select 某些參數,然后將這些參數傳遞給 ruby 腳本,該腳本調用我的 bash 自動化腳本。 我希望這很清楚。 謝謝!

如果您想從 rails 應用程序調用腳本,它會變得復雜。 您可能希望使用后台作業或某種隊列來運行這些作業,因為它們確實會阻塞服務器,並且您的用戶將等待調用完成和結果加載,很可能會遇到超時。

查看delayed_job ,您可能想嘗試在ruby 中創建一個可以與您的應用程序交互的小型包裝腳本。

祝你好運!

對於短任務,您應該使用systempopen

當任務更長時,在delayed_job作業的情況下仍然需要它們

您可以將腳本添加到您的 rails 應用程序根目錄中的腳本文件夾中。 像這樣開始你的腳本:

你的腳本可以是 [name here].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 調度程序可以輕松運行腳本。

您可以使用rails runner運行 Ruby 代碼。

…讓我們假設您有一個名為“報告”的 model。 報告 model 有一個名為generate_rankings的 class 方法,您可以使用命令行調用該方法

$ 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

示例取自Obie Fernandez的 The Rails 5 Way

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM