如何解决从Ruby脚本运行Rails Runner
我在Ruby on Rails应用程序的子目录中有一个Ruby脚本,该脚本在后台运行并执行一些支持任务。在此脚本中,希望可以访问Rails环境和应用程序控制器常量的值。
到目前为止,我能找到的最好的检索这些值的方法是基于RailsRunner。如果我跑
cd .. && Rails runner "puts [Rails.env,ApplicationController::CONSTANT_NAME]"
从外壳程序的子目录中,我得到了所需的值。但是,当我尝试在脚本中使用相同的命令时,出现了针对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中编写旨在从命令行调用的任务/脚本的事实上的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。