4

Decorate your runner session like a pro

 3 years ago
source link: https://blog.arkency.com/decorate-your-runner-session-like-a-pro/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Decorate your runner session like a pro

Paweł described some tricks you could use to tune-up your Rails console. I want to tell you about the runner method you can use to enhance your runner sessions.

Decorating runner sessions is a little bit less convenient as we don’t have a module like Rails::ConsoleMethods that is included when runner session is started. So adding some methods available for runner scripts is not that easy. However you can still add some code that will be executed at the start and the end of your runner sessions.

For example you can send some notifications so you don’t need to look at the terminal to check if the script evaluation has been finished. You can also measure time or set some Rails Event Store metadata to easily determine what has been changed during your session.

Here is an example we are using in one of our projects to log the elapsed time, set some RES metadata and send Slack notifications. You can just add it to your config/application.rb.

runner do
  session_id = SecureRandom.uuid
  script = ARGV.join(" ")
  Rails.configuration.event_store.set_metadata(
    causation_id: session_id,
    correlation_id: session_id,
    script: script,
    locale: I18n.locale.to_s,
  )
  t = Process.clock_gettime(Process::CLOCK_MONOTONIC)
  notify_slack(
    username: "Script runner",
    text: "[#{Rails.env}] Runner script session #{session_id} has started: '#{script}'",
    channel: "notifications",
    icon_emoji: ":robot_face:"
  )

  at_exit do
    notify_slack(
      username: "Script runner",
      text: "[#{Rails.env}] Runner script session #{session_id} has finished: '#{script}' (elapsed: #{Process.clock_gettime(Process::CLOCK_MONOTONIC) - t} seconds)",
      channel: "notifications",
      icon_emoji: ":robot_face:"
    )
  end
end

With such snippet, each time you run some script (or evaluate some inline Ruby code) with rails runner it will set the metadata for your RES instance and it will send a Slack notification at the beginning and the end of the runner session.

Now, a plug 🔌. Join ARKADEMY.DEV and get access to our best courses: Rails Architect Masterclass, Anti-IF course, Blogging for busy programmers, Async Remote, TDD video class, Domain-Driven Rails video course and growing!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK