运行 Rails 运行ner 来自 Ruby 脚本

Run Rails Runner from Ruby Script

我在 Rails 应用程序 Ruby 的子目录中有一个 Ruby 脚本,它 运行 在后台执行一些支持任务。在此脚本中,想要访问 Rails 环境和应用程序控制器常量的值。

目前我能找到的检索这些值的最佳方法是基于 Rails 运行ner。如果我运行

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 task 而不是:

# 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 运行程序 hacky/wonky 少很多,并且是在 Ruby 中编写 tasks/scripts 的实际方式,旨在从命令行。