約束の地

キャロ組

プログラミング -> 言語 -> Ruby

Ruby でシェルのコマンドを実行する際にダラダラ流れる標準出力をリアルタイムで見る

結論 Open3.popen3 を用いる。 具体例 以下の例で、Rails(の gem)をインストール際の標準出力がガーッと流れるように表示されます。 require 'open3' Open3.popen3('gem install rails') do |i, o, e, w| o.each { |line| puts line } end その他の方法、…

Itamae では nohup できないっぽい

前置き 数時間ハマって逃げ出したので確実ではないです。 状況 Itamae でこんなふうに書いたとします。 execute 'nohup /usr/bin/java -jar /opt/metabase/metabase.jar > /tmp/metabase_stdout.log 2> /tmp/metabase_error.log &' do # hoge end 適用すると…

Itamae で SSH するときに 秘密鍵 を指定する方法

結論 -i オプションを使う。 具体例 $ itamae ssh -u foobar -h example.com -i ~/.ssh/HIMITSU-KAGI.DESU recipe.rb

Itamae で SSH するときに ユーザ名 を指定する方法

結論 -u オプションを使う。 具体例 $ itamae ssh -u foobar -h example.com recipe.rb

Itamae でユーザをグループに追加する場合の resource は存在しない(はず)

結論 愚直にこうやりましょう。 execute 'foobar-san WO sudo NI TSUIKA SURU' do command 'usermod -aG sudo foobar' end

Itamae の user resource で password を設定するときは平文ではダメ

結論 openssl によって生成されたハッシュを書く。 具体例 $ openssl passwd -1 "foobar" $1$tK7aR9Bd$oNl3Md39zkU54HyBpm2Yb/ user 'USER WO TSUKURU' do username 'hogehoge' password '$1$tK7aR9Bd$oNl3Md39zkU54HyBpm2Yb/' (以下省略) end 参考(答え…

Ruby で $~ などの表現を分かりやすく書く

結論 $~[1] は $LAST_MATCH_INFO[1] と書けます $*[2] は $ARGV[2] と書けます 注意点 require 'english' をする必要があります。 備考 現実的には require 'english' はなされていることがほとんどだと思います 事実 $ARGV は無意識に使ってました…… requir…

Sidekiq-Cron で定期実行しようとしたら初回だけ実行されるが2回目以降が実行されずに4時間ハマった話

結論 gem のバージョンを以下のようにちゃんと指定しましょう。 gem 'sidekiq-cron', '~> 1.0.4'

Itamae の remote_file 内で user メソッドを使ったら sudo できないと怒られて 1時間 ハマった

結論 公式ドキュメントを読みましょう。 なお、remote_file 内だけでの話ではなく、Resource Type 内での話です。 user String If you specified this, commands related with the resource will be executed as the user. つまりどういうことか 以下のよう…

Itamae の command メソッド(execute resource)は一行で書く

結論 ダメ execute 'foobar' do command 'first_awesome_command' command 'second_awesome_command' end OK execute 'foobar' do command 'first_awesome_command && second_awesome_command' end

Ubuntu 16.04 および 18.04 で rbenv install をしたら rdoc のコンパイル時にエラーになった

前提 必要なパッケージ は以下のようにインストール済みです。libgdbm5 が入らない場合は libgdbm3 を入れます。 $ sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev l…

Itamae で content_file が使えなくなっているので source を使う

余談 「使えなくなっている」と言ってもかなり前の話ですが……。

Capistrano でデプロイ先のホスト名やポート番号、鍵の場所などを隠したい場合

注意 特別なことは全くしていません。そして Capistrano に限った話でもないです。 結論 dotenv を用いる。

bundle install するときに typo しても bundle install できた

結論 以下は全て OK でした。 $ bundle i $ bundle ins $ bundle inst $ bundle insta $ bundle instal 以下は怒られました。 $ bundle in Ambiguous command in matches [info, init, inject, install] 余談 知りませんでした……。

GitLab.com に プライベート gem を置いて利用する方法

プライベート gem 外部に公開できない、あるいは公開したくない gem がある場合に、GitLab.com のプライベートリポジトリにプッシュして利用する方法です。 結論 とはいえ、特に難しいところはないです。鍵の設定をしてあることを前提として、以下のとおりに…

Mail gem で POP3 でメールを受信しようとすると can't modify frozen String (FrozenError) と怒られる場合

現象 こんな感じのエラーが出ます。 $ bundle exec ruby awesome_pop3.rb Traceback (most recent call last): (中略) /Users/foobar/.rbenv/versions/2.5.1/lib/ruby/2.5.0/net/pop.rb:808:in `block in pop': can't modify frozen String (FrozenError) …

Action Mailer を単体で使って Gmail の SMTP 経由でメールを送る

Action Mailer いつものこれです。 Action Mailer を単体で使う 単なる Mail の gem を使うよりか少し楽なので、Action Mailer を単体で*1使います。いきなりコードを示すと、以下のようになります。 なお Action Mailer の gem は予めインストールしておい…

Ruby でディレクトリ名一覧を最終更新時刻の順番に並べて取得する方法

結論 以下の例ではカレントディレクトリにあるディレクトリ名を対象にしています*1。 最終更新時刻の昇順に並べる場合 Dir.glob('*/').sort_by{ |directory_name| File.mtime(directory_name) }.each do |sorted_directory_name| puts sorted_directory_name…

Legato と Tr4n5l4te を一緒に使うと ArgumentError になるとき

背景 以下の二つの gem を同時に使う場合です。

Twitter の gem で ユーザ を取得する際はなるべくバルクで取得する

Twitter の gem 理由 Rate Limits があるから。 方法 方法は簡単です。ツイートの取得の際に users メソッドを用いればよいです*1。引数として配列を与えます。 補足 一度の API を叩いて得ることができるユーザオブジェクトの個数の上限は 100個であること…

Twitter の gem で ツイート を取得する際はなるべくバルクで取得する

Twitter の gem 理由 Rate Limits があるから。 方法 方法は簡単です。ツイートの取得の際に statuses メソッドを用いればよいです*1。引数として配列を与えます。 補足 一度の API を叩いて得ることができるツイート個数の上限は 100個であることには注意し…

Twitter の gem で ユーザ の情報を取得するときに注意すること

一言で ユーザを指定するときに「アラビア数字」を用いる場合、「文字列」なのか「数値」なのかを意識的に区別する。

Ridgepole を用いて データベース の スキーマ を Git で管理する

Ridgepole こちらです。 データベースの構造の履歴を取る Ridgepole はマイグレーションツールとしての側面が強いですが、データベースのスキーマを取得するツールとしても便利です。 実行時のオプションに --export をつけるだけで指定したデータベースのス…

MiniMagick を用いて Ruby で ImageMagick (GraphicsMagick) を扱う

MiniMagick これです。RMagick はしばらくメンテがされていないようなので、現在ではこちらが選択肢になるのではないでしょうか。

Sidekiq では キーワード引数 は使えない(今のところ)

結論 Sidekiq では キーワード引数 は使えない(今のところ)。 現象 知見 注意 perform の引数としてだけではなく perform 内のメソッドでもキーワード引数が使えません*1。 *1:はず

Ruby 2.5.x において mail gem で POP3 に接続できない(FrozenError が出る)場合

結論 これが全てです。

Whenever は スケジュールファイル の場所が異なれば crontab をマージしてくれる

Whenever これです。Whenever is a Ruby gem that provides a clear syntax for writing and deploying cron jobs. 同じユーザが Whenever を複数実行したとき foobar というユーザが schedule_a.rb を whenever --update-crontab したとします。その上でさ…

Capistrano で ndenv を使う

結論 gem があります*1。 *1:感謝しかない

Capistrano で Exception while executing ...... Permission denied (SSHKit::Runner::ExecuteError) でハマった話

背景 かなり特殊な経緯です。 以前はデプロイ先のユーザは root でデプロイしていた それを一般ユーザに変えようとした そうすると表題のエラーが出た SSHのログインは問題ない

Sidekiq で Redis の namespace が切れなくてエラーになる場合

状況 こんなエラーが出たときです。 cannot load such file -- redis/namespace 結論 redis-namespace を入れる(gem)。 解答 公式ドキュメントにしっかりと書いてあります。 あとこの Issue にも。

Powered by はてなブログ