Kōenji

とうきょうとすぎなみく

草津に行った

急に温泉に入りたくなったので草津に行った

湯畑の様子
源泉の温度が高いのでそれを冷ますためにある施設らしい

西河原公園の様子
この奥には小学校のプール並の広さの露天風呂がある

草津、至る所に公衆浴場や足湯があって最高だった
観光地は多くないが徒歩/バスでほとんど回れるので一泊二日の小旅行に丁度良い
傾斜が厳しい箇所が多いので歩きやすい格好で行くのがオススメ

以上、先週の日記終わり

僕のための zsh の変数宣言とパラメータと test / let コマンドについてのメモ

毎回忘れてはググってというのを繰り返してるので書いとく

変数宣言について

パラメータについて

test コマンド と let コマンドについて

Ruby で非同期処理をするライブラリ Sidekiq についてのメモ

Ruby で非同期処理をするのに Sidekiq を使い始めた

基本的な使い方については Rails - sidekiqの使い方 - Qiita を見れば分かる
上記記事に書かれてないことについてつらつらと自分用にメモを残しておく

いちいちワーカクラス書かないといけないの

ActiveRecord と ActionMailer に便利メソッドが自動的に生える
Delayed extensions · mperham/sidekiq Wiki

スケジューリングしたい

Scheduled Jobs · mperham/sidekiq Wiki

3時間後に実行したい場合こんな感じ

MyWorker.perform_in(3.hours, 'mike', 1)
MyWorker.perform_at(3.hours.from_now, 'mike', 1)

どうせ Sidekiq のデーモン起動しっぱなしならその中で定期処理もさせたい

Sidetiq gem を使う
tobiassvn/sidetiq

毎日実行したい場合こんな感じ

class MyWorker
  include Sidekiq::Worker
  include Sidetiq::Schedulable

  recurrence { daily }

  def perform
    # 定期処理
  end
end

めちゃくちゃ重い処理するワーカがあるんだけど同時に同じ処理走らせたくない

例えばユーザが「最新の情報に更新」ボタンを押したら非同期処理するみたいやつ
連打されたら困る

SidekiqUniqueJobs を使う
mhenrixon/sidekiq-unique-jobs

同じ引数が渡された既に動いてるワーカがある場合無視してくれる

class MyWorker
  include Sidekiq::Worker
  
  sidekiq_options unique: true

  def perform(id)
    # めちゃくちゃ重い処理
  end
end

MyWorker.perform_async(1) # 非同期処理
MyWorker.perform_async(1) # 無視される
MyWorker.perform_async(2) # 非同期処理

その他便利なサードパーティライブラリ

Related Projects · mperham/sidekiq Wiki

Capistrano でデプロイ時に ChatWork に通知する拡張書いた

Capistrano でデプロイ時にデプロイの開始/終了/失敗を ChatWork に通知する拡張書いた

mitukiii/capistrano-chatwork

使用しているイメージ

使い方

Gemfile にライブラリを追加

group :development do
  gem 'capistrano-chatwork', require: false
end

config/deploy.rb でライブラリを読み込み

require 'capistrano-chatwork'

ChatWork の API トークンと通知先の room_id を設定

set :chatwork_api_token, 'YOUR_API_TOKEN'
set :chatwork_room_id, 'YOUR_ROOM_ID'

設定

以下の変数が使える

設定が必須の変数

  • chatwork_api_token - ChatWork の API トークン
    デフォルトは ENV['CHATWORK_API_TOKEN']
  • chatwork_room_id - 通知先の room_id

メッセージをカスタマイズするための変数

  • chatwork_deploy_started_message - デプロイ開始時のメッセージ
    デフォルトは "#{user} is deploying #{deployment_name} to #{rails_env}"
  • chatwork_deploy_finished_message - デプロイ終了時のメッセージ
    デフォルトは "#{user} finished deploying #{deployment_name} to #{rails_env}"
  • chatwork_deploy_failed_message - デプロイ失敗時のメッセージ
    デフォルトは "#{user} failed deployment of #{deployment_name} to #{rails_env}"
メッセージ内で使えるメソッド

メッセージをブロック(Capistrano 3.x 系の場合は Lambda)で設定すれば以下のメソッドをメッセージ内で使うことが出来る

  • user - git の設定または環境変数から取得
  • deployment_name - capistrano の branch 変数と/あるいは application 変数から取得
  • rails_env - capistrano の rails_env 変数から取得
メッセージの設定例

Capistrano 2.x 系

set(:chatwork_deploy_started_message) { "#{user}#{deployment_name}#{rails_env} にデプロイ開始しました" }
set(:chatwork_deploy_finished_message) { "#{user}#{deployment_name}#{rails_env} にデプロイ完了しました" }
set(:chatwork_deploy_failed_message) { "#{user}#{deployment_name}#{rails_env} にデプロイ失敗しました" }

Capistrano 3.x 系

set :chatwork_deploy_started_message, ->{ "#{user}#{deployment_name}#{rails_env} にデプロイ開始しました" }
set :chatwork_deploy_finished_message, ->{ "#{user}#{deployment_name}#{rails_env} にデプロイ完了しました" }
set :chatwork_deploy_failed_message, ->{ "#{user}#{deployment_name}#{rails_env} にデプロイ失敗しました" }

その他

Capistrano 2.x 系でも 3.x 系でも動くようにするのに少し苦労した
capistrano-resque を参考にした