質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Q&A

解決済

1回答

890閲覧

Railsチュートリアル13章 ArgumentErrorでherokuにデプロイできない

tokenoko

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

0グッド

0クリップ

投稿2020/07/28 11:28

前提・実現したいこと

Railsチュートリアル13章(第4版)をしています。
画像アップロード機能を開発環境で実装後、S3へ新規登録・バケットを作成後、herokuへデプロイしようとしましたが、
ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_keyとなり、デプロイができません。
どうしたらよいのか、また、まだ確認できていない所があればご教授いただきたいです。

発生している問題・エラーメッセージ

$ git push heroku Counting objects: 94, done. Compressing objects: 100% (89/89), done. Writing objects: 100% (94/94), 16.33 KiB | 1.02 MiB/s, done. Total 94 (delta 51), reused 0 (delta 0) remote: Compressing source files... done. remote: Building source: remote: remote: -----> Ruby app detected remote: -----> Installing bundler 1.17.3 remote: -----> Removing BUNDLED WITH version in the Gemfile.lock remote: -----> Compiling Ruby/Rails remote: -----> Using Ruby version: ruby-2.6.6 remote: -----> Installing dependencies using bundler 1.17.3 remote: Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment remote: The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`. remote: Fetching gem metadata from https://rubygems.org/........ (割愛) remote: Installing fog-ovirt 1.2.5 remote: Fetching fog-aliyun 0.3.17 remote: Installing fog-aliyun 0.3.17 remote: Fetching fog 1.42.0 remote: Installing fog 1.42.0 remote: Bundle complete! 29 Gemfile dependencies, 121 gems now installed. remote: Gems in the groups development and test were not installed. remote: Bundled gems are installed into `./vendor/bundle` remote: Post-install message from fog: remote: ------------------------------ remote: Thank you for installing fog! remote: remote: IMPORTANT NOTICE: remote: If there's a metagem available for your cloud provider, e.g. `fog-aws`, remote: you should be using it instead of requiring the full fog collection to avoid remote: unnecessary dependencies. remote: remote: 'fog' should be required explicitly only if: remote: - The provider you use doesn't yet have a metagem available. remote: - You require Ruby 1.9.3 support. remote: ------------------------------ remote: Bundle completed (18.89s) remote: Cleaning up the bundler cache. remote: The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`. remote: -----> Installing node-v12.16.2-linux-x64 remote: -----> Detecting rake tasks remote: -----> Preparing app for Rails asset pipeline remote: Running: rake assets:precompile remote: rake aborted! remote: ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key remote: /tmp/build_d61f6f6b/vendor/bundle/ruby/2.6.0/gems/fog-core-1.45.0/lib/fog/core/service.rb:244:in `validate_options' remote: /tmp/build_d61f6f6b/vendor/bundle/ruby/2.6.0/gems/fog-core-1.45.0/lib/fog/core/service.rb:268:in `handle_settings' remote: /tmp/build_d61f6f6b/vendor/bundle/ruby/2.6.0/gems/fog-core- (割愛) remote: /tmp/build_d61f6f6b/vendor/bundle/ruby/2.6.0/gems/railties-5.1.6/lib/rails/initializable.rb:59:in `block in run_initializers' remote: /tmp/build_d61f6f6b/vendor/bundle/ruby/2.6.0/gems/railties-5.1.6/lib/rails/initializable.rb:48:in `each remote: /tmp/build_d61f6f6b/vendor/bundle/ruby/2.6.0/gems/railties-5.1.6/lib/rails/initializable.rb:48:in `tsort_each_child' remote: /tmp/build_d61f6f6b/vendor/bundle/ruby/2.6.0/gems/railties-5.1.6/lib/rails/initializable.rb:58:in `run_initializers' remote: /tmp/build_d61f6f6b/vendor/bundle/ruby/2.6.0/gems/railties-5.1.6/lib/rails/application.rb:353:in `initialize!' remote: /tmp/build_d61f6f6b/config/environment.rb:5:in `<top (required)>' remote: /tmp/build_d61f6f6b/vendor/bundle/ruby/2.6.0/gems/railties-5.1.6/lib/rails/application.rb:329:in `require' remote: /tmp/build_d61f6f6b/vendor/bundle/ruby/2.6.0/gems/railties-5.1.6/lib/rails/application.rb:329:in `require_environment!' remote: /tmp/build_d61f6f6b/vendor/bundle/ruby/2.6.0/gems/railties-5.1.6/lib/rails/application.rb:445:in `block in run_tasks_blocks' remote: /tmp/build_d61f6f6b/vendor/bundle/ruby/2.6.0/gems/sprockets-rails-3.2.1/lib/sprockets/rails/task.rb:62:in `block (2 levels) in define' remote: Tasks: TOP => environment remote: (See full trace by running task with --trace) remote: remote: ! remote: ! Precompiling assets failed. remote: ! remote: ! Push rejected, failed to compile Ruby app. remote: remote: ! Push failed remote: Verifying deploy... remote: remote: ! Push rejected to secure-earth-21052. remote: To https://git.heroku.com/(割愛).git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'https://git.heroku.com/(割愛).git'

該当のソースコード

Gemlile

1group :production do 2 gem 'pg', '0.20.0' 3 gem 'fog', '1.42' 4end 5 6# Windows環境ではtzinfo-dataというgemを含める必要があります 7gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

carrierwave

1if Rails.env.production? 2 CarrierWave.configure do |config| 3 config.fog_provider = 'fog/aws' #←ここを追記 4 config.fog_credentials = { 5 # Amazon S3用の設定 6 :provider => 'AWS', 7 :region => ENV['ap-northeast-1'], # 例: 'ap-northeast-1' 8 :aws_access_key_id => ENV['aws_access_key_id'], 9 :aws_secret_access_key => ENV['aws_secret_access_key'] 10 } 11 config.fog_directory = ENV['S3で設定したバケット名'] 12 end 13end

pictureuploader

1class PictureUploader < CarrierWave::Uploader::Base 2 include CarrierWave::MiniMagick 3 process resize_to_limit: [400, 400] 4 5 if Rails.env.production? 6 storage :fog 7 else 8 storage :file 9 end 10 11 # アップロードファイルの保存先ディレクトリは上書き可能 12 # 下記はデフォルトの保存先 13 def store_dir 14 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 15 end 16 17 # アップロード可能な拡張子のリスト 18 def extension_white_list 19 %w(jpg jpeg gif png) 20 end 21end

試したこと

Rails+CarrierWave+heroku環境でAWS S3へ画像をアップロードする
こちらを参考にしましたが、上手くいきませんでした。

Rails, Laravel(画像アップロード)向けAWS(IAM:ユーザ, S3:バケット)の設定
こちらを参考にバケットポリシーを後で追加・パブリックアクセスの制限を外しましたが、エラー内容は変わりませんでした。

Ruby on Rails チュートリアル13章 herokuデプロイ時に環境変数が無いと起きるエラー
こちらのコードを参考にgem fog-awsをインストールしてみましたが、エラー内容は変わりませんでした。

Rails Tutorial13章のherokuへのデプロイ時に詰まった
Railsチュートリアルのコードをコピーしてこの追加分だけが増えているのが、
現在の状態です。
herokuのダッシュボードとheroku config:setで確認した環境変数は一致しています。

補足情報(FW/ツールのバージョンなど)

・Windows 10
・AWS Cloud9
・Amazon S3
・Rails 5.1.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

no1knows

2020/07/28 11:38

提示頂いたgemfileを見るとrailsすら利用していないようですが、大丈夫でしょうか?
tokenoko

2020/07/28 11:53

文字数の関係で省略してしまいました、割愛したことを書くのが抜けていました、ご指摘いただきありがとうございます。 Gemfileは以下です。 ``` source 'https://rubygems.org' gem 'rails', '5.1.6' gem 'bcrypt', '3.1.12' gem 'faker', '1.7.3' gem 'carrierwave', '1.2.2' gem 'mini_magick', '4.7.0' gem 'will_paginate', '3.1.6' gem 'bootstrap-will_paginate', '1.0.0' gem 'bootstrap-sass', '3.3.7' gem 'puma', '3.9.1' gem 'sass-rails', '5.0.6' gem 'uglifier', '3.2.0' gem 'coffee-rails', '4.2.2' gem 'jquery-rails', '4.3.1' gem 'turbolinks', '5.0.1' gem 'jbuilder', '2.7.0' group :development, :test do gem 'sqlite3', '1.3.13' gem 'byebug', '9.0.6', platform: :mri end group :development do gem 'web-console', '3.5.1' gem 'listen', '3.1.5' gem 'spring', '2.0.2' gem 'spring-watcher-listen', '2.0.1' end group :test do gem 'rails-controller-testing', '1.0.2' gem 'minitest', '5.10.3' gem 'minitest-reporters', '1.1.14' gem 'guard', '2.14.1' gem 'guard-minitest', '2.4.6' end group :production do gem 'pg', '0.20.0' gem 'fog', '1.42' end # Windows環境ではtzinfo-dataというgemを含める必要があります gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] ```
Yasumichi

2020/07/28 12:19 編集

【回答に転記】
guest

回答1

0

ベストアンサー

リスト 13.70: CarrierWaveを通してS3を使うように修正する あたりか、その前後の部分で手順が抜けていないでしょうか?

特に

今回は手動で設定する必要があります。heroku config:setコマンドを使って、次のようにHeroku上の環境変数を設定してください。

ruby

1$ heroku config:set S3_ACCESS_KEY="ココに先ほどメモしたAccessキーを入力" 2$ heroku config:set S3_SECRET_KEY="同様に、Secretキーを入力" 3$ heroku config:set S3_BUCKET="Bucketの名前を入力" 4$ heroku config:set S3_REGION="Regionの名前を入力"

の部分は実行されていますか?

※Ruby としてますが、シェルコマンドです。

【追記1】
heroku の dashboard で該当 app の Settings を開き、Config Vars が意図したとおりになっているか、確認するのも手かと思います。

【追記2】

config/initializers/carrier_wave.rb にて

ruby

1 :region => ENV['ap-northeast-1'], # 例: 'ap-northeast-1'

となっていますが、

ruby

1 :region => ENV['S3_REGION'], # 例: 'ap-northeast-1'

ではないでしょうか?

【追記3】

あたらめて見直すと config/initializers/carrier_wave.rb は、チュートリアルの通り、以下のように記述すべきかと思います。(「例」が紛らわしいので仕方ない気もしますが。)

ruby

1 :provider => 'AWS', 2 :region => ENV['S3_REGION'], # 例: 'ap-northeast-1' 3 :aws_access_key_id => ENV['S3_ACCESS_KEY'], 4 :aws_secret_access_key => ENV['S3_SECRET_KEY']

あくまでENV[''] 内は、設定内容ではなく環境変数名である必要があります。

※例は、以下のように書いた場合と同義だよということを伝えたかったのだと思われます。

ruby

1 :region => 'ap-northeast-1'

投稿2020/07/28 12:18

編集2020/07/28 13:24
Yasumichi

総合スコア1773

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokenoko

2020/07/28 12:42

回答いただきありがとうございます! 挙げていただいた部分は実行しています。 heroku config:get S3_ACCESS_KEY heroku config:get S3_SECRET_KEYで確認すると、 それぞれIAMの設定の時にCSVで保存したAccess key IDとSecret access keyが入っています。 IAMの設定時に参考にしたものは以下です。https://qiita.com/ryuchan00/items/8e414562b7122e7ec4fb また、herokuのSetting>Config Varsからも確認しましたが、同じように入力されていました。 S3_BUCKETというのはIAMの設定後、作ったS3のバケットの名前をいれています。 S3_REGIONはap-northeast-1が入っています。
Yasumichi

2020/07/28 13:03

:region => ENV['ap-northeast-1'], # 例: 'ap-northeast-1' ではなく、 :region => ENV['S3_REGION'], # 例: 'ap-northeast-1' ではないですか?
Yasumichi

2020/07/28 13:16 編集

「例」が紛らわしいですけど、あくまでENV[''] 内は、設定内容ではなく環境変数名である必要があると思います。ということで回答に追記しました。ここに内容を書いてしまうと > Herokuの環境変数 ENV を使って、機密情報が漏洩しないようにしています。 が実現できません。
tokenoko

2020/07/28 13:39

度々の追記ありがとうございます! 追記3を読んで、チュートリアル内の表記を見て、はっとしました!! >訳注: fogでリージョンを指定する場合は :region => ENV['S3_REGION'] といったパラメータを渡し、heroku config:set S3_REGION="リージョン名" といったコマンドを実行することで設定できます。 パラメーターを渡している、とはそういうことだったんですね。 技術うんぬんではなく、日本語の問題でした... 修正したら、デプロイできました! 一人でずっと考えていたので、勇気を出して質問してよかったです、 ありがとうございます!
Yasumichi

2020/07/28 13:59

解決して良かったです。 object ENV (Ruby 2.7.0 リファレンスマニュアル) https://docs.ruby-lang.org/ja/latest/class/ENV.html ここが分かってないと同じ勘違いをする方もいそうな気がします。マニュアルとか、チュートリアル書くのは難しいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問