运行 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 的实际方式,旨在从命令行。
我在 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 的实际方式,旨在从命令行。