簡體   English   中英

從 Ruby 腳本運行 Rails Runner

[英]Run Rails Runner from Ruby Script

我在 Ruby on Rails 應用程序的子目錄中有一個 Ruby 腳本,該應用程序在后台運行並執行一些支持任務。 在這個腳本中,想要訪問 Rails 環境和應用程序控制器常量的值。

到目前為止,我能找到的檢索這些值的最佳方法是基於 Rails runner。 如果我跑

cd .. && Rails runner "puts [Rails.env, ApplicationController::CONSTANT_NAME]"

從 shell 的子目錄中,我得到了所需的值。 但是當我嘗試在我的腳本中使用相同的命令時,我收到 active_storage 的未定義方法錯誤:

/home/user/.rvm/gems/ruby-2.6.5/gems/railties-6.0.3.2/lib/rails/railtie/configuration.rb:96:in `method_missing': undefined method `active_storage' for #<Rails::Application::Configuration:0x0000563603fbdaa8> (NoMethodError)

腳本中的代碼是

puts %x|cd .. && rails runner "puts [Rails.env, ApplicationController::CONSTANT_NAME]"|

Rails 應用程序和 Ruby 腳本在同一用戶下運行。 我有 Rails 6.0.3.2 和 Ruby 2.6.5。

你想要做的是寫一個Rake 任務

# lib/tasks/foo.rake
namespace :foo do
  description "@TODO write a descripion"
  task bar: :environment do
    # your logic goes here
    puts [Rails.env, ApplicationController::CONSTANT_NAME]
  end
end

這個任務可以通過bin/rake foo:bar調用。 bar: :environment為該任務加載 Rails 環境。

與使用 rails runner 相比,這要少很多 hacky/wonky,並且是在 Ruby 中編寫旨在從命令行調用的任務/腳本的事實上的方式。

暫無
暫無

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

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