Poltergeistを使ったFeatureSpecで、phantomjsが無いと怒られるようになった時の対策

Poltergeistを使ったFeatureSpecで、phantomjsが無いと怒られるようになった

phantomjs -v
rbenv: phantomjs: command not found

The `phantomjs' command exists in these Ruby versions:
  2.5.5

何かのきっかけで、rbenv/shims配下にphantomjsが追加されたのかな?(調べられていない)

これを消して、暫定的に回避できた

mv ~/.rbenv/shims/phantomjs ~/.rbenv/shims/phantomjs.bak

一旦これで回避した(が、あとでちゃんと調べたい)

2019/4/26 追記

webdriversの2系のバージョンをインストールした際に、 rbenv/shims配下にphantomjsが作られていた模様。

$ gem list webdrivers

*** LOCAL GEMS ***

webdrivers (3.7.2, 2.4.0)

$ gem uninstall webdrivers

Select gem to uninstall:
1. webdrivers-2.4.0
2. webdrivers-3.7.2
3. All versions
> 1
Remove executables:
 IEDriverServer, MicrosoftWebDriver, chromedriver, geckodriver, phantomjs

in addition to the gem? [Yn]  Y

webdriversを削除したものの、shimsにはまだ残ってた。

$ which phantomjs
/Users/yoshito/.rbenv/shims/phantomjs

なので手動で削除

$ rm /Users/yoshito/.rbenv/shims/phantomjs

これで解決、無事に/usr/local/bin配下のphantomjsが参照されるようになった。

$ which phantomjs
/usr/local/bin/phantomjs

プログラミング合宿で楽しいプログラミングに没頭できた

今年も行ってきましたプログラミング合宿

nishiwaki-koberb.doorkeeper.jp

今回で5回目、ここまでのところ、毎回参加しています

自分自身のテーマは

  • Rails5.2の新機能を使ってみる
  • Vue.jsを使ってみる
  • 習慣の記録を簡単にできるためのwebアプリを作りたい

勉強もできて、作りたかったwebアプリもとりあえず使えるレベルにまでできて、 成果としては個人的には大満足。

そのほか、アイスブレイク用のRuby問題を用意する役を仰せつかり、一生懸命考えてきました。

場所は昨年と同じく、新たんば荘

会場の入口はこんな感じ

f:id:tanakayoshi10:20181112085235j:plain:w300

会場のレイアウト変更し、アイスブレイク開始

最初は、プログラミングかるた

f:id:tanakayoshi10:20181112085356j:plain:w300

知らない言語がたくさんあって、「へぇ〜」の連続でした

その後、アイスブレイク用のRuby問題を出題

昼食、山菜そば

f:id:tanakayoshi10:20181112085439j:plain:w300

午後からはアイスブレイク問題をみんなで解いて、いくつかの回答をみんなでコードレビュー

マグネットテーブルでチーム決め、 その後各自で各自のテーマに取り掛かり

夕食は宴会場で(宴会はしていないけど)

f:id:tanakayoshi10:20181112085728j:plain:w300 f:id:tanakayoshi10:20181112085743j:plain:w300

料理、とても美味しかったです。 お酒飲まずにストイックな感じ

その後も各自でプログラミング

チーム内で中間報告会

その後、お部屋にチェックイン

f:id:tanakayoshi10:20181112085943j:plain:w300

大浴場へ

いやー、気持ちよかった。 明日は良いコードが浮かびそうって気分になった。

寝る直前まで続きをやって、そのままバタンキュー

朝の風景

f:id:tanakayoshi10:20181112090807j:plain:w300

朝ごはんはバイキング形式。写真撮り忘れた。

その後散策、山のぼり

f:id:tanakayoshi10:20181230181720j:plain

「昨日、行き詰まっていた課題の解決策が、なんか思い浮かびそう」 な気分になれました

二日目のお昼ご飯

f:id:tanakayoshi10:20181112090237j:plain:w300

最後に成果発表をして終了

まとめ

普段なかなかできなかったことに、じっくり取り組めるとても良い機会でした。 みんなで困りごとを解決するシーンが何度かあり、 問題解決のためのテクニックをたくさん知ることができて、かなり勉強になりました。

とにかく楽しかったです。 運営の皆さん、参加者の皆さんありがとうございました。

Mac(Mojave)でredisを動作させるまでのメモ

2018/12/27時点

Homebrewで導入して、メッセージに従って起動するだけ

brew installして

$ brew install redis
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
tass64
==> Updated Formulae
bitcoin       cgit          circleci      cointop       easyengine    futhark       gdb           node          node@10       node@8        pulumi        repo          theharvester

==> Downloading https://homebrew.bintray.com/bottles/redis-5.0.3.mojave.bottle.tar.gz
######################################################################## 100.0%
==> Pouring redis-5.0.3.mojave.bottle.tar.gz
==> Caveats
To have launchd start redis now and restart at login:
 brew services start redis
Or, if you don't want/need a background service you can just run:
 redis-server /usr/local/etc/redis.conf
==> Summary
🍺  /usr/local/Cellar/redis/5.0.3: 13 files, 3.1MB

メッセージに従って起動する(自動起動の場合)

$ brew services start redis
==> Successfully started `redis` (label: homebrew.mxcl.redis)

foregroundで手動実行したい場合は

 redis-server /usr/local/etc/redis.conf

nodebrew use しても nodeのバージョンが変わらない事象を解決するまで

nodebrew use しても nodeのバージョンが変わらない事象を解決するまでのメモ

前提

  • fishを利用している
  • nodebrewを利用している(いつ入れたのか忘れた)

結論

  • PATHの設定を見直したら直った

解決までの流れ

$ nodebrew use latest
use v11.5.0

$ node -v
v8.14.1

なぜかnodeのバージョンが切り替わっていない

nodebrewをuninstallする

$ brew uninstall nodebrew
Uninstalling /usr/local/Cellar/nodebrew/1.0.1... (8 files, 38.6KB)
nodebrew 0.9.8 is still installed.
Remove all versions with `brew uninstall --force nodebrew`.

$ brew uninstall --force nodebrew
Uninstalling nodebrew... (8 files, 38.4KB)

$ node -v
v8.14.1

uninstallしたけど、nodeが動作している

$ nodebrew
fish: Unknown command 'nodebrew'

nodebrewは消えている

$ which node
/usr/local/var/nodebrew/current/bin/node

/usr/local/var配下に残っている。なんだろう?

$ echo $fish_user_paths
/usr/local/var/nodebrew/current/bin

いつ設定したんだろう。よく覚えていない。とりあえず消そう。

$ set -e fish_user_paths[100..-1]
$ echo $fish_user_paths

$ node -v
fish: Unknown command 'node'

消したら、nodeへのパスは通らなくなった

$ brew install nodebrew
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> Updated Formulae
cocoapods            haste-client         kontena              mikutter             sphinx-doc           travis               vim@7.4
easyengine           imagemagick          libstfl              ruby                 tox                  vim                  wpscan

==> Downloading https://github.com/hokaccha/nodebrew/archive/v1.0.1.tar.gz
Already downloaded: /Users/yoshito/Library/Caches/Homebrew/downloads/9895acc38dc859a4a1a841cf2e8cd78b519163d3499cdfcd4a08a068ce0babcd--nodebrew-1.0.1.tar.gz
==> Caveats
You need to manually run setup_dirs to create directories required by nodebrew:
  /usr/local/opt/nodebrew/bin/nodebrew setup_dirs

Add path:
  export PATH=$HOME/.nodebrew/current/bin:$PATH

To use Homebrew's directories rather than ~/.nodebrew add to your profile:
    export NODEBREW_ROOT=/usr/local/var/nodebrew

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
🍺  /usr/local/Cellar/nodebrew/1.0.1: 8 files, 38.6KB, built in 7 seconds

いろいろ書かれてる。言われてるとおりにやろう。

$ node -v
fish: Unknown command 'node'

まだPATH通してないので当然か

$ set -U fish_user_paths $fish_user_paths ~/.nodebrew/current/bin
$ node -v
v11.5.0
$ nodebrew use 8.14.1
use v8.14.1
$ node -v
v8.14.1
$ nodebrew use latest
use v11.5.0

ちゃんと切り替わるようになった。めでたしめでたし

自然音とジャズとオーディオブックを流しながら仕事

在宅で仕事しているので、音楽などは流し放題

ということで最近は

を同時に流しながら仕事したりしてる

仕事に集中できないんじゃないか、という声も聞こえて来そうだけど、 ザワザワしたオフィスや、喫茶店と同じようなものかなーと思ってる。 雑音がある方が集中できる、という話もあるし。

全然人にオススメはできないけど、 個人的には邪魔にならないように感じている。 (つもりだけど、実は効率落ちているのだろうか)

seeds.rbでデータ投入する際、createよりもcreate!を使うべき?

Railsアプリケーションで、初期データを投入する方法として、「'seeds' feature」というものがあります。 db/seeds.rbファイルにRubyコードを書き、rake db:seedを実行することで利用できます。

先日とあるアプリケーションにて次のようなことが起こりました。

  • seeds.rbにてcreateでデータを投入していた
  • modelに変更を加えたので、seed.rbを修正
  • 修正後、rake db:seedを実行、特にエラーも無く正常終了
  • ところが、結果のデータを見ると、あるべきデータが投入されていない。

そこで、createをcreate!に変更してみたところ、validationエラーでデータ投入が失敗していることがわかりました。 modelの変更に伴い、createで指定するパラメータの追加が必要だったのですが、指定方法に誤りがあり、validationで失敗してデータが投入されていなかった、というわけです。

createとcreate!の違い

create、save、updateは、validationに失敗した場合にfalseを返します。それに対して、 create!、save!、update!、はvalidationに失敗した場合にActiveRecord::RecordInvalid例外を発生します。

参考 Active Record の基礎 | Rails ガイド

というわけで

以上のことから、seeds.rbでデータ投入する際、データ投入が失敗していることを検出するために、createよりもcreate!を使うべきでは、と思ったのですが、どうなんでしょう。 こう変えた時にデメリットあるのでしょうか。

追記

Railsチュートリアルにも記載がありました。 http://railstutorial.jp/chapters/updating_and_deleting_users?version=4.2#code-db_seed

Mac OS Xにrmagickをインストール

Macでrmagickをbudle installする際にやったことを書いておきます。 エラーメッセージをよく読もうという教訓の話。

環境

やったこと

bundle installすると以下のエラーが発生

% bundle install
(略)

Installing rmagick 2.13.2 with native extensions

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/yoshito/.rbenv/versions/2.1.1/bin/ruby extconf.rb
checking for Ruby version >= 1.8.5... yes
checking for clang... yes
checking for Magick-config... no
Can't install RMagick 2.13.2. Can't find Magick-config in /Users/yoshito/.rbenv/versions/2.1.1/bin:/Users/yoshito/.rbenv/libexec:/Users/yoshito/.rbenv/plugins/ruby-build/bin:/Users/yoshito/.nodebrew/current/bin:/Users/yoshito/.rbenv/shims:/Users/yoshito/.rbenv/bin:/opt/chefdk/bin:/usr/local/heroku/bin:/Users/yoshito/.nodebrew/current/bin:/Users/yoshito/.rbenv/shims:/Users/yoshito/.rbenv/bin:/opt/chefdk/bin:/usr/local/heroku/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/yoshito/.rbenv/versions/2.1.1/bin/ruby

extconf failed, exit code 1

Mac rmagickで調べてみると、 ImageMagicのインストールが必要とのことで 以下を実施

brew install imagemagick

再度チャレンジすると状況は変わったが、まだエラーが起きている。

Installing rmagick 2.13.2 with native extensions

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/yoshito/.rbenv/versions/2.1.1/bin/ruby extconf.rb
checking for Ruby version >= 1.8.5... yes
checking for clang... yes
checking for Magick-config... yes
checking for ImageMagick version >= 6.4.9... yes
checking for HDRI disabled version of ImageMagick... yes
/usr/local/bin/Magick-config: line 41: pkg-config: command not found
/usr/local/bin/Magick-config: line 47: pkg-config: command not found
/usr/local/bin/Magick-config: line 50: pkg-config: command not found
/usr/local/bin/Magick-config: line 53: pkg-config: command not found
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.13.2. Can't find MagickWand.h.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/yoshito/.rbenv/versions/2.1.1/bin/ruby

extconf failed, exit code 1

ググって調べた情報を元に 環境変数PKG_CONFIG_PATHを設定してみたりしたが状況は変わらず。

もう一度エラーメッセージをよく読んでみると、

/usr/local/bin/Magick-config: line 41: pkg-config: command not found

とででいる。 pkg-configコマンドが無いのが原因ぽい

% pkg-config
zsh: command not found: pkg-config

Mac pkg-config でググると次の記事を発見

この情報を参考に以下を実行

brew install pkg-config

これでbundle installが成功しました。

まとめ

結局のところ、以下のコマンドでうまくいくのではと思いますが、 本当にこれで十分かは確認できてません。 (アンインストールしてもう一回やらないと確証がもてない)

brew install imagemagick
brew install pkg-config
bundle install

やはりエラーメッセージをよく読むことが大切ですね。