かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Ruby GiHub のブランチをブランチを指定して gem で読み込ませたい

Gemfile で読み込んでいる GitHubリポジトリをPR出してるブランチで問題ないか確認したい

Gemfile

gem 'aikatsu', git: "git://github.com/<username>/aikatsu.git"

branch: <branch_name> で指定すればOK

Gemfile

gem 'aikatsu', git: "git://github.com/<username>/aikatsu.git",
  branch: 'planet'

これで bundle install すれば OK

$ bundle install
# …
Using aikatsu 1.0.0
  from git://github.com/<username>/aikatsu.git (at planet@<hash>)

ブランチ指定されているログが流れてきたら OK

おまけ

作業してた環境は プライベートリポジトリで token を発行して https://<token>:x-oauth-basic@github.com/<username>/<reponame>.gt の形になっていて、

git+https://<token>:x-oauth-basic@github.com/<username>/<reponame>#<tagname>

ように最後の <tagname> の箇所をブランチ名にすることができるという記事を見つたのですが、Gemfile ではリポジトリを見つけられないというエラーになってしまい上手く行かず、branch: <branch_name> を指定する方法で意図した通りに動作させることができました。 (よく見たらこの記事 npm でした… js とで指定方法が違うのでしょうか…ナゾ)


 

Ruby 関係時々触るくらいなので全然ちからが付かない…
おわり。


[参考]

ウェス・アンダーソンの風景(仮) Accidentally Wes Anderson

ウェス・アンダーソンの風景(仮) Accidentally Wes Anderson

  • 発売日: 2020/12/18
  • メディア: 単行本(ソフトカバー)

アイカツ!プラネット!も楽しみ!!

Ruby bundle install gb のエラーにハマる

Rails のプロジェクトのローカル環境を作っていて bundle install したら pg の箇所でエラーが発生したのでメモ

環境

エラー内容

$ bundle install
# … 略
Installing pg 1.2.3 with native extension
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
\*\*\* extconf.rb failed \*\*\*
# … 略
An error occurred while installing pg (1.2.3), and Bundler cannot
continue.
Make sure that `gem install pg -v '1.2.3' --source 'https://rubygems.org/'`
succeeds before bundling.

In Gemfile:
  pg

pg_config のパスを指定する

pg_config が見つからないので、 --with-pg-config=/path/to/pg_config オプションで pg_config のパスを指定しろトノコト
homebrew でインストールした postgresql の bin 内に pg_config があるのでこのパスを指定する

/usr/local/Cellar/postgresql/<VWESION>/bin/pg_config

こんな感じ。

$ bundle config build.pg --with-pg-config=/usr/local/Cellar/postgresql/<VWESION>/bin/pg_config
$ bundle install
// …略
Installing pg 1.2.3 with native extension
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
\*\*\* extconf.rb failed \*\*\*
// …略

libpq-fe.h が無いというエラーが出続けている…

libpqpg_config を指定する

$ brew install libpq

libpq
You can install libpq (dev files are included) alone using homebrew.
cf. postgresql - Install libpq-dev on Mac OS? - Super User

Postgres 無しに devファイルを含む psql などのユーティリティを提供しているパッケージらしい
libpq にも pg_config があるのでこちらのファイルを指定してみる

/usr/local/Cellar/libpq/<VWESION>/bin/pg_config

パスは postgresql と同じ感じ

$ bundle config build.pg --with-pg-config=/usr/local/Cellar/libpq/VWESION/bin/pg_config
$ bundle install
// …略
Installing pg 1.2.3 with native extensions
// ...略

問題なく bundle install が完了しました。
このまま問題なくローカル環境は動作しているのですが、postgresql もインストールしている状態だったので libpq だけで十分なのかどうかは解っていません。
bundle install gb でコケて postgresqlpg_config のパスを指定してもうまく行かない場合は libpg を使うと解決するかも知れません。

Ruby まだ慣れてないのでエラーとかがなんもわからん状態です。
おわり


[参考]

RSpec Capybara name / id のない input の fill_in にハマる

プロダクトの施策であるフォームを react component に置き換えた所、元々あった feature spec で fill_in していた部分が Capybara::ElementNotFound: で落ちるようになってしまいました。

fill_in は id か name が無いと選択できない?

新しくした React component の JS でフォーム送信をしていたので、フォーム内の input タグに id / name 属性が無かったので、feature spec を次のような感じに置き換えていました。

fill_in 'input[type="email"]', with: user.email

=> これはエラーになる。Capybara::ElementNotFound: Unable to find field "input[type=\"email\"]" that is not disabled within #<Capybara::Node::Element tag="div" path="/HTML/BODY[1]/DIV[9]/DIV[1]">

#fill_in([locator], with: , **options) ⇒ Capybara::Node::Element
Locate a text field or text area and fill it in with the given text. The field can be found via its name, id, test_id attribute, placeholder, or label text. If no locator is provided this will operate on self or a descendant.
cf. https://rubydoc.info/github/jnicklas/capybara/master/Capybara%2FNode%2FActions:fill_in

ドキュメントを見た感じ name, id, test_id, attribute, placeholder, label で見つけることはできるようです。
つまりCSSセレクタ的な input[type="email"].inputField みたいなのはダメって事のようです。(単一なものとして取得しづらいからでしょうか…?)

id / name の無い input を Capybara で操作するには findset を使う

今回は fill_in で取得できる id や 属性 が無く、React component は色々な所で使いまわしていたのでテストのために属性を追加したくはないという感じでした。
このような場合は find で要素を見つけてきて set で値をセットすれば OKトノコト。

find('input[type="email"]').set(user.email)

先程のテストをこのように書き換えたら無事テストが実行できるようになりました。₍ᐢ •̥ ̫ • ᐢ₎👌 やったね!  

docker-compose 上で動いてるアプリの RSpec 回そうとしたら TimeoutError になって辛い… (怒りの WIP commit でCIぶん回しました…)


[参考]

カピバラ

カピバラ

  • 作者:渡辺克仁
  • 出版社/メーカー: 東京書籍
  • 発売日: 2015/09/04
  • メディア: Kindle