読者です 読者をやめる 読者になる 読者になる

【Gem】【Rails】RubyGemsにあるcarrierwaveをインストールすると最新バージョンなのに古い内容になってしまう

はじめに

Webサービスを開発していて、ハマったところなのでメモ。

環境

詳細

Amazon S3に対して、画像アップロード機能を作成したかったため
「carrierwave」を追加しました。

バリデーションエラーがなければ、指定したディレクトリに画像がアップロードされ
問題なかったのですが、バリデーションに引っかかった場合、画像が消えないように
一時ディレクトリに格納されるようにしていました。

しかし、画像が格納されず機能が実装されていない?と思い、ライブラリを調査しました。

コードに機能が実装されているか確認

GitHubに公開されているので、ソースを確認します。

github.com

途中、調査していたところ、0.10でAmazon S3に一時的にファイルが
アップロードされるようになったようなので機能はありそうです

github.com

バージョンの確認

bundle installした際に古いライブラリがインストールされている可能性があるため
アンインストールして、再度実行する。

...中略...
Installing carrierwave 0.11.2
...中略...

RubyGemsのサイトを見に行くと0.11.2が最新っぽいので大丈夫そうです。

carrierwave | RubyGems.org | your community gem host

ここまでやっても解決しません。

インストールされたライブラリを確認

実装したロジックがおかしいのかな?と考え、1つ1つ確認したところ問題なし。
そして、せっかくRubyMineを使っているのでIDEから該当箇所のロジックが
ないかどうかを確認しました。

確認したところ、追加されたロジックに関する内容がすべてありませんでした。
バージョンは確かに0.11.2というのに。

解決策

Gemfile

gem 'carrierwave'

上記の記述を以下のように修正

gem 'carrierwave', github: 'carrierwaveuploader/carrierwave'

ライブラリを直接GitHubから取ってくるようにしました。

Install carrierwave 0.11.0 from git://github.com/carrierwaveuploader/carrierwave.git (at master@b31f7ce)

原因

原因を探ろうと思ったのですが、検討がつかず時間が経ってしまったので
一旦前に進むようにします。謎すぎる。。。