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

rbenv install をする際に「configure: error: something wrong with LDFLAGS=......」というエラーが出た際の解決方法の一つ

前提条件 環境は macOS だという前提条件にします。 結論 brew reinstall openssl を実行して openssl を再インストールします。私の場合はこれで解決しました。以下、インストール時のログです。

Ruby の &:upcase 記法を改めて整理してみる

Ruby において面食らう記法の一つは、map メソッドなどの引数に現れる、&:upcase というような、以下の3つの要素が同時に存在する記法だと思います*1。 アンド(アンパサンド) コロン 文字 上記の例では upcase 改めてこの記法について整理してみます。箇条…

Ruby で クロージャ を実装する(Proc オブジェクト を用いる)

クロージャ とは Wikipedia で「クロージャ」を見てみます。 ja.wikipedia.org クロージャ(クロージャー、英語: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数にて利用可能な機能・概念で…

bundler v2.1.2 にて --path オプションを追加したら DEPRECATED が出たので bundle config set path に移行した

流れ まず、Bundler を v2.1.2 にした $ gem update bundler を行って Bundler のバージョンを v2.1.2 にしました。 $ gem update bundler Updating installed gems Updating bundler Fetching: bundler-2.1.2.gem (100%) Successfully installed bundler-2.…

インストール可能な gem の バージョン番号 の一覧を表示する方法

結論 Itamae を例に取ります。インストール可能な Itamae のバージョン番号一覧を表示させるためには以下のコマンドを実行します。実行結果も付与します。 $ gem search ^itamae$ --all *** REMOTE GEMS *** itamae (1.10.6, 1.10.5, 1.10.4, 1.10.3, 1.10.2…

ImageMagick 7 で rmagick を使う方法

rmagick とは ImageMagick を扱う gem です。 github.com ImageMagick 7 では rmagick は使えない かなり以前からですが、ImageMagick 7 では rmagick を使うことができません。bundle install する際に以下のようなエラーが出て怒られます*1。 An error occ…

FactoryBot で Trait を定義したら NoMethodError: が出る場合

結論 引数を指定する際に {}(波括弧、ブレイス)を使いましょう。 具体例 ダメな例 FactoryBot.define do factory :user do trait :ikemen do name '太郎' end end end OKな例 FactoryBot.define do factory :user do trait :ikemen do name { '太郎' } end…

Ruby で require に書く場所は「コマンドを実行する場所からの相対位置」になる

実例 ./lib/x.rb というファイルが以下のようであったとします。 class X (中略) end また、./lib/a.rb というファイルが以下のようであったとします。 require './x' (以下省略) このとき、 カレントディレクトリが ./ であるときに $ ruby ./lib/a.rb …

RSpec で Headless Chrome を使う際に Chrome が Dev だったり Canary だったりする場合(安定版とは異なるバージョンの Chrome を使っている場合)の対処法

大原則 使用する Chrome に合った ChromeDriver を ダウンロード します。 合致するバージョンがない場合に以下を試します。 結論 エラーが出たときに出てくるエラーメッセージをよく読みます。 Webdrivers::VersionError: Unable to find latest point rele…

Visual Studio Code でリアルタイムに RuboCop の結果を表示する

必要なもの gem rubocop solargraph VSCode の拡張機能 ruby-rubocop Ruby Solargraph VSCode の設定方法 ruby-rubocop について 変更の必要なし Ruby Solargraph について Solargraph: Diagnostics の設定を true にする 動作確認をしてみる 下の画像はファ…

Ruby で ?(はてな、ハテナ、クエスチョンマーク)の後ろに文字を書いた場合の戻り値(返り値)は文字リテラルになる

なぜこの記事を書いたのか 最高クラスのググりにくさなので、何とかして引っかからないかと思い書きました のググりやすさよ…… https://docs.ruby-lang.org/ja/latest/class/Comparable.html">*1。 答え 答えはズバリここです。 きっかけ 南谷さんのツイート…

MySQL 8 を使っている場合に mysql2 の gem install で失敗するとき(Mac)

前提 gem install でインストールする場合です 結論 $ gem install mysql2 -- --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib" 参考

自作の 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 参考(答え…

Powered by はてなブログ