Help us understand the problem. What is going on with this article?

Capistrano + carrierwaveを使用した際に出るエラー解消

解決したいこと

Carrierwaveでfogを用いているときに、
「Capistranoで自動デプロイしたい」という欲望をもったときに発生するであろうエラー。
サタンが舞い降りてきて心身ともにボコボコにされます。

発生エラー
rake aborted!
ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key

解決フロー

前提

  • carrierwaveでfog用に以下のrails起動時の初期化を行っている
initializers/carrierwave.rb
if Rails.env.production?
  CarrierWave.configure do |config|
    config.fog_provider = 'fog/aws'
    config.fog_credentials = {
        provider: 'AWS',
        aws_access_key_id: ENV['fog_api_key'],        # AWSアクセスキー
        aws_secret_access_key: ENV['fog_api_secret'], # AWSシークレットキー
        region: ENV['fog_region'],                    # S3リージョン
        host: ENV['fog_host']                     # S3エンドポイント名(例: s3-us-west-2.amazonaws.com)
    }
  end
end
  • capistrano起動に必要な設定ファイル(capfile等)がgitにプッシュされている
  • capistranoの対象ブランチがmaster
  • 以下コマンドで起動
$ bundle exec cap production deploy

解決方法

結論から書くと、解決は以下が一番早いです。
環境変数を.bash_profileではなく.bashrcに記載する。

.bashrc
export fog_api_key=*****
export fog_api_secret=*****

原因

capistranoのコマンド起動時に環境変数が設定されていない。
もっと言うと、bash_profileを読み込まないため。

capistrano公式サイトにシェルログイン形式によるファイル読み込みフローがあります。

※capistranoの設定ファイルのdefault_envに記載することでも解決しますが、gitにプッシュする必要があるためセキュリティ上よろしくないです。
publicリポジトリでの公開では特に。

config/deploy.rb
set :default_env, {
  fog_api_key: "*****",
  fog_api_secret: "*****"
}

補足

以下Capfileにモジュールを追加した後に、capコマンドで、capistrano起動環境で動作サーバに入ることができます。

Capfile
require 'capistrano/console'
$ bundle exec cap production console

その後、envコマンドをうつことで実際に設定されている環境情報を確認できます。
設定後、不安な方は出力してみてください。

同じ事象に遭遇した方の解決に寄与することを祈ります。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away