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

自作の gem を bundle install しようとしたら ...not valid. Please fix this gemspec. と怒られた場合

結論 ルートにある foo_bar-0.1.0.gem のような .gem ファイルを削除する*1。 背景 自作の gem である 自前の GitLab にプッシュしたものである Gemfile 内で git: https://gitlab.example.com/... のように指定してインストールしようとしたものである spec…

Ruby で Slack へ単にポストするだけの方法

Ruby で Slack へ単にポストするだけの方法 gem Slack Ruby Client を用います。Slack::Incoming::Webhooks という gem もありますので*1、機会があれば触ってみるとよいかと思います。 具体的な方法 1. "Bots" アプリをワークスペースに追加する Bots とい…

Repro Tech: Long Life RailsApps の雑なまとめ

結論 読みやすくすること テストしやすくすること 最も大事なことは「それを行うことでユーザによりよい価値やサービスを届けられるようになること」 Repro Tech: Long Life RailsApps これです。 当日の発表資料 全員の方の発表資料が公開されています。 当…

Mac で rbenv 経由で Ruby をインストールした際に Readline が原因で pry や byebug が 実行できないとき

結論 CONFIGURE_OPTS を設定した上で rbenv install する。 具体例 $ CONFIGURE_OPTS="--with-readline-dir=/usr/local/opt --with-openssl-dir=/usr/local/opt" rbenv install 2.6.0 ruby-build: use openssl from homebrew Downloading ruby-2.6.0.tar.bz2…

リモートの Git リポジトリからファイルを持ってきてそれをただ配置するだけの Capistrano を書く 

1. まずはインストール gem install でも bundle install でもよいのでまずはインストールします。 $ gem install capistrano 2. まずは初期化 初期化しましょう。 $ cap install mkdir -p config/deploy create config/deploy.rb create config/deploy/stag…

CentOS 7 で rbenv install しようとしたら no acceptable C compiler found in $PATH と出た場合

結論 gcc を入れます。 $ sudo yum install -y gcc 補足 rbenv/ruby-build の Wiki には以下のように書いてあります。が、これだけだと標題のエラーが出てしまいました。 CentOS/Fedora: # (`dnf install` on Fedora 22+) yum install -y gcc-6 bzip2 openss…

よちよち.rb & Sendagaya.rb 合同開催「よちがや.rb」 〜REST アーキテクチャを理解しよう会〜 に行ってきました

よちよち.rb & Sendagaya.rb 合同開催「よちがや.rb」 〜REST アーキテクチャを理解しよう会〜 2019/01/07 に開催された「よちよち.rb & Sendagaya.rb 合同開催「よちがや.rb」 〜REST アーキテクチャを理解しよう会〜」に行ってきました。内容の詳細につい…

WSL + Visual Studio Code の環境で Rubocop (ruby-rubocop) を使う方法

結論 こちらをご覧ください。

Capistrano で Rails をデプロイする際に bundle:install で Bundler が実行できないとき

結論 Gemfile.lock に書いてある Bundler のバージョンと、Capistrano が実行しようとする Bundler のバージョンが一致しない*1から。 前提条件 rbenv を使っていて Ruby は正しくインストールされている 上記のバージョンの Ruby にて Bundler もインストー…

slack-ruby-client で 画像をポストする(ファイルをアップロードする)ときの注意点

結論 チャンネル指定のキーには 'channels' として複数形を用いる。 公式ドキュメント

slack-notifier で画像を投稿する

前提 slack-notifier を用いる 画像ファイルを直接 POST することはできない 画像ファイルの URI を POST する 結論 require 'slack-notifier' notifier = Slack::Notifier.new 'WEBHOOKS_URI' do defaults channel: '#DEFAULT NO CHANNEL NAME' end attachm…

slack-ruby-client で ユーザ にメンションする(飛ばす)方法(@channel や @here を含む)

前提 slack-ruby-client を用いる @taro にメンションを飛ばすものとします @taro の「メンバーID」は ABCD1EF2G であるとします 結論 '<@ABCD1EF2G> こんにちは!' だめな例 '<@taro> こんにちは!' '<taro> こんにちは!' '@taro こんにちは!' '<ABCD1EF2G> こんにちは!' </abcd1ef2g></taro>…

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…

Powered by はてなブログ