Rails runnerを使ってファイルを実行しました

  • 22
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Railsにrunnerというバッチ処理などを実行できるものがあるので、runnerを実行しました。

実行用スクリプトを用意

実行用に、lib/batch/helloworld.rbというスクリプトを用意しました。

helloworld.rb
class Batch::Helloworld
  def self.helloworld
    puts "HelloWorld!"
  end
end

runnerで実行

helloworld.rbを実行します。

runnerでファイルを実行
bundle exec rails runner Batch::Helloworld.helloworld
# 出力
HelloWorld!

おまけ

lib/batch/get_api.rb というスクリプトを用意しました。

get_api.rb
class Batch::GetApi
  def self.get_api
    # API を取得する処理
    puts "GET API"
  end
end
runnerでファイルを実行
bundle exec rails runner Batch::GetApi.get_api
# 出力
GET API

runnerの実行でエラーが出る場合

runnerを実行した際にエラーが発生することがありました。

エラーが発生
/home/vagrant/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/railties-4.2.0/lib/rails/commands/runner.rb:62:in `<top (required)>': uninitialized constant Batch (NameError)

これは/lib以下が読み込めていないことが原因のようです。
config/application.rbに読み込み設定を記述します。

application.rbにautoload_pathsを追加
class Application < Rails::Application
  
  config.autoload_paths += Dir["#{config.root}/lib"]
  
end

このように書くことでエラーは発生せず、runnerを実行することができました。

おまけ Herokuでrunnerを実行

Herokuでrunnerコマンドを実行する場合は、heroku runをつければ動くみたいです。

herokuでrunnerを実行
heroku run rails runner Batch::GetApi.get_api --app pugiemonn