転送量無料で 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 オブジェクトストレージにデータが保存されます。