約束の地

キャロ組

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

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 にも。

Ruby で名前付きキャプチャを用いる際には正規表現オブジェクトを使わない

結論 大丈夫な例 /(?<foobar>[a-z]+)/ =~ 'abcdefg' puts foobar #=> abcdefg だめな例 regexp = /(?<foobar>[a-z]+)/ regexp =~ 'abcdefg' puts foobar #=> undefined local variable or method `foobar' for main:Object (NameError) 感想 そりゃそうなのかな、という感想</foobar></foobar>…

Sidekiq でジョブの並列実行数を制限する

結論 sidekiq-limit_fetch を使う。

「TLで集めた顔文字とか」を収録した Google 日本語入力 の辞書ファイルを作りました

はじめに 以下の記事の分家です。

Google 日本語入力 の辞書で同じ「よみ」に200語以上の単語を登録しても変換できない

結論 表題のままです。具体例を見てもらったほうが早いかと思います。

Failed to open TCP connection to https://www.example.com:80 (getaddrinfo: Name or service not known) (SocketError) のようなエラーが出たとき

Ruby です。 一つの解決法 誤っている例 MyApplication::Client.new( host: 'https://www.example.com', port: 80, username: 'MY_USERNAME', password: 'MY_PASSWORD', use_ssl: true, ) 一見誤りはないように見えます(見えました)。結構ハマりました*1。…

Twitter の gem でツイートに埋め込まれた URL を t.co 形式で取得する

結論 Tweetオブジェクトの uris メソッドを用いた戻り値*1の要素に対してさらに url メソッドを用いる。 具体例 以下のツイートを例とします。 【イベントレポート】Intel、最大5GHz達成のCore i7-8086Kを6月8日から発売... (71 users) https://t.co/PUbnmOl…

Rails で ES6 のコンパイルが失敗する場合

エラーメッセージ Uglifier::Error: Unexpected token: name (foobar_foobar). To use ES6 syntax, harmony mode must be enabled with Uglifier.new(:harmony => true). 結論 config/environments/production.rb を以下のように書き換えましょう*1。 変更前…

Rails で複数のデータベースを扱う

結論 ツラミがある。 答えはほぼこれかと [Rails]複数のデータベースに接続する 上記からのリンク記事 Rails で複数 DB の migration をする方法の調査と考察 Railsで複数DBとうまく付合おう

Slim で link_to の中に iタグ を埋め込む

結論 安直にこれで。 = link_to 'リンクです!<i class="material-icons">link</i>'.html_safe, 'https://example.com' 備考 ブロックを使うとごちゃごちゃしちゃうので、html_safe メソッドを使っていることを認識した上でこれで良いかと思います。 参考

Rails を起動したら Cannot load `Rails.application.database_configuration`: (NoMethodError) が出てハマった

結論(の一つ) database.yml の中の記述で、コメントの中に erb の書式で記述しているものがあり、さらにその返り値が例外になるものがあるとき標題のエラーが出る。

Rails での <video> タグの書き方

結論 video_tag を使う 具体例 your_video_name.mp4 という動画ファイルを app/assets/videos/your_video_name.mp4 に置いた場合です autoplay と loop をオプションで指定してます <%= video_tag 'your_video_name.mp4', autoplay: true, loop: true %> オ…

RSpecでマイグレーションをスキップさせる方法

結論 spec/rails_helper.rb の ActiveRecord::Migration.maintain_test_schema! をコメントアウトする # ActiveRecord::Migration.maintain_test_schema! 背景 既存のデータベースを読み出し専用で扱う場合にこうしました*1。 *1:レアケースでしょう

RSpec で response.body に JSON が入っていて欲しいけど空っぽで返ってくる場合

結論 render_views を実行する。 例 describe Api::UsersController do render_views describe... 背景 Jbuilder を使って遭遇しました*1。 参考 *1:異論はあると思いますが……

Capistrano で Rails をデプロイする際に db:migrate をしない方法

結論 /Capfile(の一部)を以下のように記述する。 # require 'capistrano/rails' require 'capistrano/bundler' require 'capistrano/rails/assets' # require 'capistrano/rails/migrations'

Powered by はてなブログ