アーカイブ

‘Ruby’ カテゴリーのアーカイブ

MacにPostgreSQLをインストールする。 このエントリーを含むはてなブックマーク はてなブックマーク - MacにPostgreSQLをインストールする。

2014 年 9 月 2 日 Comments off

いくつか気をつけるところあったのでメモ。

% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.9.4
BuildVersion:   13E28
% brew install postgresql --no-tcl
% rm -rf `brew --prefix`/var/postgres
% initdb `brew --prefix`/var/postgres -E utf8
% ln -sfv `brew --prefix postgresql`/*.plist ~/Library/LaunchAgents
% launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

※1 Homebrewが勝手にinitdbしちゃうのでエンコーディング指定して再実行する
※2 作業するときにはtmuxは使わない(launchctlで失敗する)

% ARCHFLAGS="-arch x86_64" bundle install

※3 pgのgem入れるときにはARCHFLAGSを付ける

カテゴリー: Mac, Ruby タグ:

MacにNokogiriをインストールする。 このエントリーを含むはてなブックマーク はてなブックマーク - MacにNokogiriをインストールする。

2014 年 9 月 2 日 Comments off

あちこちググって回ったらみんな少しずつ違って試行錯誤したのでメモ。
こんな感じでインストールできた。

% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.9.4
BuildVersion:   13E28
% brew tap homebrew/dupes
% brew install libxml2 libxslt libiconv
% brew link libxml2 libxslt --force
% bundle config build.nokogiri --use-system-libraries --with-xml2-include=`brew --prefix libxml2`/include/libxml2 --with-xml2-lib=`brew --prefix libxml2`/lib --with-xslt-include=`brew --prefix libxslt`/include/libxslt --with-xslt-lib=`brew --prefix libxslt`/lib --with-iconv-include=`brew --prefix libiconv`/include --with-iconv-lib=`brew --prefix libiconv`/lib
% bundle install
% bundle list | grep nokogiri
  * nokogiri (1.6.3.1)

公式はこちら。

Nokogiri

Installing Nokogiri

カテゴリー: Mac, Ruby タグ:

raiseとfailについて。 このエントリーを含むはてなブックマーク はてなブックマーク - raiseとfailについて。

2014 年 6 月 6 日 Comments off

Rubyにおけるraiseとfailの使い分けについて。 – Sooey

rescueなどで捕捉した例外を再度発生させる時には「何かがfailなわけではないので」raiseを用い、それ以外の場合はfailを用いる、というような使い分けのパターンがあるようだ。

なるほどー。

カテゴリー: Ruby タグ:

unlessについて。 このエントリーを含むはてなブックマーク はてなブックマーク - unlessについて。

2014 年 5 月 25 日 Comments off

この2つのツイートを見ていて、自分はそうは思わなく、なぜだろうと風呂に浸かりながら考えた結果が面白かったので書きます。
初めに言うと、良い悪いについて話をしたいのではなく、自分の頭の中がこうだった、という話です。

自分は「unless」という文字列を見たときに「あ、ifの反対だ。」という発想をしていました。
「unless」という英単語や「u」「n」「l」「e」「s」「s」という文字の集合でもない、単なる記号。
車を運転していて「赤い三角の標識」を見て「止まらなきゃ」とか、「赤い丸に白いラインの標識」を見て「ここ入れないな」と思うのと同じ感じ。

だから「if !」や「if not」の様に2つに分かれてしまうのがモヤモヤする。
「unless」とひとつの方が記号としてスッキリしていい、と思ったのでした。

カテゴリー: Ruby タグ:

rbenvとwheneverとrakeと。 このエントリーを含むはてなブックマーク はてなブックマーク - rbenvとwheneverとrakeと。

2014 年 4 月 13 日 Comments off

録音したラジオでPodcastを作って聞く生活をしているのですが、思いつきで環境をいじったらハマってしまったのでメモ。経緯はこんな感じです。

cron直書きだったのでwheneverを使おう。→Rubyが1.9.3だったから2.1.1に上げよう。→rvmだったからrbenvに切り替えよう。→あれ、動かない。

芋づる式に余計なことしている感が出ていますね。
結果を先に書くと、rbenvの初期化を含んだjob_typeを追加しました。

https://github.com/yoshuki/oreore-radio/blob/master/config/schedule.rb#L24

ということで、以下経緯です。
まず、wheneverでパスを通すために↓を追加ってのはよく見ます。

env :PATH, ENV['PATH']

これに倣ってパスは通せていたのですが、rbenvを使うにはこれだけでは足りず、rbenvのドキュメントに書かれている通り初期化が必要でした。

eval "$(rbenv init -)"

これを~/.bash_profileに足してはいたんですが、そもそもcronでは読んでくれないっていうのに気が付くまで時間がかかりました。

「job_type :rbenv_rake」の中が;区切りでダラッとなっているのが少し気になりますが、wheneverのrakeメソッドがデフォで含むRAILS_ENVを除くために「job_type :rake」の再定義をしていたので、先の「env :PATH」のところもひとつのメソッドにまとめられてスッキリした気持ちではいます。

カテゴリー: Ruby タグ:

トークンで認証する。 このエントリーを含むはてなブックマーク はてなブックマーク - トークンで認証する。

2014 年 4 月 3 日 Comments off

deviseを使ったアプリでトークン認証をしようとしていて、過去に機能があったものの3.1から廃止されているのを知りました。

Devise 3.1: Now with more secure defaults | Plataformatec Blog

Since the usage of the authenticatable token can vary considerably in between applications, each requiring different safety guarantees, we have decided to remove TokenAuthenticatable from Devise, allowing users to pick the best option.

アプリごとに要求されるセキュリティレベルが違うはずで、ライブラリの標準機能として画一的にするのはやはり問題なので各々実装してくださいね、という感じ。

そしてこのエントリから代替案としてリンクされているのがこちらのページです。
This gist describes two of the available solutions.

1番はトークンのみで認証して、2番はトークンの他にもうひとつ(メールアドレス)を組み合わせる方法になっています。
いろいろ議論が交わされているのですが、gonzalo-bulnesさんがまとめてgem作ったよ、てのが最新ステータス。

simple_token_authentication | RubyGems.org | your community gem host

Simple (but safe) token authentication for Rails apps or API with Devise.

2番のメールアドレスとトークンを使用する方法で、クエリーパラメータだけでなくリクエストヘッダでの認証にも対応しているようです。
ソースを読んだところ大きくなく、なにかあっても自分で実装して回避したりプルリク投げたりできそうなので、使わせていただくことにしました。

カテゴリー: Rails, Ruby タグ:

日時をよしなに解釈する。 このエントリーを含むはてなブックマーク はてなブックマーク - 日時をよしなに解釈する。

2014 年 3 月 5 日 Comments off

javan/whenever · GitHub

Whenever is a Ruby gem that provides a clear syntax for writing and deploying cron jobs.

とあるRailsアプリでcronを管理するためにwheneverを使い始めたのですが(便利ですね!これ)、時間指定のところで「4:30 am」や「12pm」、「12:20am」など、いろいろな記法を受け入れていて、どんな実装になっているんだろうとソースを見たらchronicというgemを使っていました。

https://github.com/javan/whenever/blob/master/lib/whenever/cron.rb#L15

mojombo/chronic · GitHub

Chronic is a natural language date/time parser written in pure Ruby. See below for the wide variety of formats Chronic will parse.

こちらも便利で、ありがたい。

カテゴリー: Rails, Ruby タグ:

is_a?とkind_of?について。 このエントリーを含むはてなブックマーク はてなブックマーク - is_a?とkind_of?について。

2014 年 1 月 27 日 Comments off

Rubyist Magazine – あなたの Ruby コードを添削します 【第 2 回】 HexStruct.rb

kind_of? は is_a? の alias ですから、効果は同じです。 しかし最近は三人称を避けるべきという理由で kind_of? が推奨されています。

こちらで見かけてからkind_of?を使っているんですが、以降このことに言及しているところを見てないことに気が付きました。
はて、最近はどうなんでしょうか。

[ref.] instance method Object#is_a?

カテゴリー: Ruby タグ:

except(:order)とunscope(:order)の違い。 このエントリーを含むはてなブックマーク はてなブックマーク - except(:order)とunscope(:order)の違い。

2014 年 1 月 23 日 Comments off

ActiveRecord::QueryMethods

Note that this method is more generalized than ActiveRecord::SpawnMethods#except because except will only affect a particular relation’s values. It won’t wipe the order, grouping, etc. when that relation is merged.

マージされた場合に、exceptでは指定されたところ以外は残るけど、unscopeではそれすらもキャンセルされるみたい。へえぇ。

カテゴリー: Rails, Ruby タグ:

Springは直に入れ、なくても問題なくなったみたい。 このエントリーを含むはてなブックマーク はてなブックマーク - Springは直に入れ、なくても問題なくなったみたい。

2013 年 11 月 28 日 Comments off

消えているっていうのは、まぁそういうことってことですよ・・・ね?

Revise readme · 9aea281 · jonleighton/spring

-Install the `spring` gem. You can add it to your Gemfile if you like but
-it’s optional. You now have a `spring` command. Don’t use it with
-`bundle exec` or it will be extremely slow.

[ref.] Springは直に入れよう。 » サイキョウライン

カテゴリー: Rails, Ruby タグ: