1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Mac環境でRubyを利用したスクレイピングとTumblrに自動投稿するスクリプトを作る際に引っかかったこと

Last updated at Posted at 2018-07-04

やりたかったこと

JavaScript が使われた某サイトの情報をスクレイピングして編集し、自動で毎日Tumblr へ情報をポストしたかったのでスクリプトと実行環境を自宅の Macmini 上に作った。ruby での作業、Mac では始めてでした。

使った技術

  • ruby(Capybara + Poltergeist(PhantomJS), tumblr_client)
  • MySQL
  • cron

引っかかったとこ

Ruby のバージョンが反映されない

問題

Capybara をインストールしようとしたときに MacOSX の ruby のバージョンが古いから、ruby のバージョンを上げてくれというメッセージが出た。

バージョンアップ方法を調べて結果、rbenv を使ってインストールしたが、反映されなかった。

解決

反映させるには

  • バージョン指定して切替える
  • .bash_profile に Ruby の参照パスを追加する

の2つが必要だった。そもそも rbenv はユーザー権限毎にバージョン切り替えを提供するための仕組みらしく、ユーザー毎に参照先指定するのはなるほどなーと思った。

bundler が反映されない

問題

gem は 他の言語でいうところのライブラリにあたるのかな。それらをインストールしたり管理したりするツールが複数あるらしく(めんどい)、というか複数あるなんてしらず、たまたま見ていた記事では bundler というツールで gem をインストールすると書いてあったので、そのまま適応してみたんですよね。でインストールしたけど、そんなコマンド知らん、といって怒られた。

解決

bundler へのパス通す必要がある。というかインストール時にうまいことやって欲しいぜ。。

.bashrc にパスを追加することで解決。

gem が反映されない

問題

bundler でインストールした gem ないって怒られた。

解決

bundler でインストールした gem を使う(require)にはプログラム内に

require 'bundler/setup'
Bundler.require

と書く必要がある。

bundler も rbenv 同様にユーザー毎に設定する感じなんですね。

ruby スクリプトが cron で起動できない

問題

ユーザー環境で問題なく tumblr_client による投稿も確認できたので、cron で自動投稿しようとしたら、ruby のバージョンが違う、といわれて怒られた。

解決

ユーザー環境では当然、rbenv で参照する .bash_profile を読み込んでいるけれど、cron を動かす root さんはユーザー環境なんか知らんので、既存の ruby を呼び出してしまい、結果システムが使う古い ruby が起動してしまっていた。なので、起動する際に、ユーザーの .bash_profile を読み込んでからスクリプトを起動するように cron のコマンドを書き換える。

* * * * * sonots /bin/bash -lc 'cd /path/to/program-dir && ruby program.rb'

/bin/bash を使うのですけど cron のデフォルトは /bin/sh だったので、crontab に「SHELL=/bin/bash」を追加しました。

bash のオプション -l はログインシェルとして起動されたかのように動くので、.bash_profile を読み込む、-c で以降のスクリプトを起動する、といった意味ですね。

参考リンク

rbenv

rbenvとは?(rbenvを利用したRubyのインストール)
rbenvでmacのrubyを最新にする
Rubyのバージョンが切り替わらない時の対処法!

bundler

cron

用語集

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?