Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@yoshis777

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

More than 1 year has passed since last update.

解決したいこと

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

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

参考

1
Help us understand the problem. What is going on with this article?
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

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?