2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-03-15

解決したいこと

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コマンドをうつことで実際に設定されている環境情報を確認できます。
設定後、不安な方は出力してみてください。

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

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?