ウェブサービスを作っています。

CarrierWave で ConoHa オブジェクトストレージを使う

転送量無料で 100GB あたり 450 円/月という ConoHa オブジェクトストレージCarrierWave から使う方法です。

公開設定にすることで、画像サーバとして使うことができます。

CarrierWave のバージョンは 0.10.0、fog のバージョンは 1.24.0 で確認しています。

公開設定でコンテナを作成する

まず、公開設定でコンテナを作成します。

ConoHa のコントロールパネルからは公開設定のコンテナを作成できませんので、プログラムで作成します。

必要な情報は、コントロールパネルの「アカウント - API」( https://cp.conoha.jp/Account/API/ ) に掲載されています。

require 'fog'

CONOHA_TENANT_NAME = (テナント名)
CONOHA_USERNAME = (ユーザー名)
CONOHA_API_PASSWORD = (API パスワード)
CONOHA_API_AUTH_URL = (API Auth URL)
CONOHA_CONTAINER_NAME = (作成するコンテナ名)

service = Fog::Storage.new(
  provider: 'OpenStack',
  openstack_tenant: CONOHA_TENANT_NAME,
  openstack_username: CONOHA_USERNAME,
  openstack_api_key: CONOHA_API_PASSWORD,
  openstack_auth_url: CONOHA_API_AUTH_URL + '/tokens',
)

service.put_container(CONOHA_CONTAINER_NAME,
  public: true, headers: { 'X-Web-Mode' => 'true' })

CarrierWave の設定

Gemfile

gem 'carrierwave'
gem 'fog'
gem 'dotenv-rails'

config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  if Rails.env.production?
    config.fog_credentials = {
      provider: 'OpenStack',
      openstack_tenant: ENV['CONOHA_TENANT_NAME'],
      openstack_username: ENV['CONOHA_USERNAME'],
      openstack_api_key: ENV['CONOHA_API_PASSWORD'],
      openstack_auth_url: ENV['CONOHA_API_AUTH_URL'] + '/tokens',
    }
    config.fog_directory = ENV['CONOHA_CONTAINER_NAME']
    config.storage :fog
    config.asset_host = ENV['CONOHA_ASSET_HOST'] + '/' +
      ENV['CONOHA_CONTAINER_NAME']
  else
    config.storage :file
  end
end

.env

CONOHA_TENANT_NAME=(テナント名)
CONOHA_USERNAME=(ユーザー名)
CONOHA_API_PASSWORD=(API パスワード)
CONOHA_API_AUTH_URL=(API Auth URL)
CONOHA_CONTAINER_NAME=(コンテナ名)
CONOHA_ASSET_HOST=(オブジェクトストレージエンドポイント)

以上で、production 環境のときは ConoHa オブジェクトストレージにデータが保存されます。