質問: Ruby on Rails でアプリを開発し、画像投稿機能を実装しようと考えています。 Heroku にデプロイしたアプリはクラウドストレージを使わないと画像の保存ができないことから、Heroku と相性のいい Cloudinary を導入しようと思うのですが、`gem 'cloudinary'`導入の前段階で根本的な疑問が生じたので質問させていただきます。 ### 前提 アプリを Heroku にデプロイするにあたって、本番環境のデータベースを Postgresql に変更しました(開発環境は SQLite3)。 その際、 Postgresql を本番環境だけ適応するために`bundle install --without production`を使いました。 ``` # gem 'sqlite3' ←コメントアウト group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'sqlite3' ←追記 end group :production do ←以下追記 gem 'pg' end ``` この`--without production`オプションによって、上記のようにproduction(本番環境)のみ使用する gem を開発環境に導入しないようにできる、という理解で合っているでしょうか? いずれにせよ、上記のように`bundle install --without production`を使ってデータベースの設定を変更し、その後アプリを Heroku にデプロイして動作確認まで終了しました。 そして、冒頭で触れた画像投稿機能の件ですが、ここで`gem 'cloudinary'`を追加する場合、Gemfile のどこに`gem 'cloudinary'`を書けばいいのか、また、`bundle install`のみでいいのか、疑問が生じました。 ### 本題 ActiveStorage::Service::CloudinaryServiceを参考に cloudinary を導入しようと思います。 上記の Gemfile に > > gem 'cloudinary', require: false > > gem 'activestorage-cloudinary-service' > > > を追記したいのですが、書く場所はどこになるのでしょうか。 本番環境で使用するわけですので、group :production do ~ end 間になるのでしょうか。 あるいは development, test, production 全ての環境に適応させるべきなのでしょうか。 また、`bundle install`する際に、何かオプションを付ける必要はあるのでしょうか。 現状では、上述のように以前`bundle install --without production`を行ったため、`.bundle/config`に`BUNDLE_WITHOUT: "production"`が設定されています。このため、`bundle install`しただけでは`gem 'cloudinary'`が本番環境に適応されないのかなと思うのですが。 ### 教えていただきたいこと 1. `gem 'cloudinary'`は Gemfile のどこに書けばいいのでしょうか。 2. この場合、`bundle install`にはどのようなオプションが必要でしょうか。
回答: 画像アップローダーに Refile を使用している関係で、Cloudinary の導入はあきらめました。 今のところ Refile と Cloudinary をつなぐ Gem がないそうです。 Refile を Carrierwave に切り替えてもよかったのですが、今回は Cloudinary を AWS S3 に切り替えることで対応しました。 質問への回答ですが、`gem "refile-s3"`を普通に Gemfile に書き、単に`bundle install`で大丈夫でした。