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

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

新規登録して質問してみよう
ただいま回答率
85.35%
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)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1402閲覧

herokuデプロイでrake assets:precompileの失敗(NoMethodError)

Lernen

総合スコア4

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)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/03/20 10:51

編集2020/03/22 12:20

前提・実現したいこと

この度は宜しくお願いします。

heroku+carrierwave+S3にてデプロイを行おうとし、以下のコマンドを実行しました。

git push heroku master

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

エラーは、途中で発生したものはこちら

remote: -----> Preparing app for Rails asset pipeline remote: Running: rake assets:precompile remote: rake aborted! remote: NoMethodError: undefined method `[]' for nil:NilClass remote: /tmp/build_5a651971b2df337d5a7aadd064b90937/config/initializers/carrierwave.rb:11:in `block in <top (required)>'

最終的に赤字で書かれていたのはこちら

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 appname. remote: To https://git.heroku.com/appname.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'https://git.heroku.com/appname.git'

となります。

該当のソースコード

carrierwave.rb

1require 'carrierwave/storage/abstract' 2require 'carrierwave/storage/file' 3require 'carrierwave/storage/fog' 4 5CarrierWave.configure do |config| 6 if Rails.env.production? 7 config.storage = :fog 8 config.fog_provider = 'fog/aws' 9 config.fog_credentials = { 10 provider: 'AWS', 11 aws_access_key_id: Rails.application.credentials.aws[:access_key_id], 12 aws_secret_access_key: Rails.application.credentials.aws[:secret_access_key], 13 region: 'ap-northeast-1' 14 } 15 16 config.fog_directory = 'S3のバケット名' 17 config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/S3のバケット名' 18 19 else 20 config.storage :file 21 config.enable_processing = false if Rails.env.test? 22 end 23 24 CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:].\-+]/ 25 26end

試したこと

エラー文から、環境変数が上手く読み込めていないのではと考えました。
・(念のため)ローカル環境にaws_access_key_id, aws_secret_access_keyをexport 環境変数=値で記述
・credentials.ymlにも環境変数=値で記述
(コンソールでRails.application.credentials.aws[:access_key_id]と入れたところ、期待通りの値が出ました。シークレットキーも同様です)
・ターミナルからheroku configでRAILS_MASTER_KEY, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_S3_REGION, AWS_S3_BUCKET, 以上の環境変数を定義、herokuダッシュボードのConfig Varsでも確認

環境変数定義は行えていると思うのですが、それでも同様のエラーが続き、お邪魔しました。
ご助力いただけますと幸いです。

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

Rubyは5.2系、bundlerは2.0.2、データベースは

Gemfile

1group :development, :test do 2 gem 'mysql2', '>= 0.4.4', '< 0.6.0' 3end 4 5group :production do 6 gem 'pg' 7end

という設定になっています。検索の際cssをscssにリネームするのいうのも見かけたのですが、今回、cssファイルは使用しておりません(application.scss以下全てscssファイル)

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

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

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

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

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

hoshi-takanori

2020/03/23 05:22

Rails よく分かりませんが、carrierwave.rb の 11 行目って「Rails.application.credentials.aws[:access_key_id]」の部分だと思いますが、これは環境変数ではなく credentials.yml.enc とかいうファイルで指定するものなのでは。 https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39
Lernen

2020/03/23 05:28

ご覧いただきありがとうございます!おっしゃる通り11行目は「Rails.application.credentials.aws[:access_key_id]」なのですが、credentials.ymlには値を記述しています(試したことの中にあります通り、コンソールで「Rails.application.credentials.aws[:access_key_id]」と入れると期待した値が返ってきました) また、そのcredentials.ymlを読めるように、マスターキーを環境変数=値という形でheroku configにも記載しています。
guest

回答1

0

自己解決

こちらの問題ですが、herokuにおいていた環境変数名を大文字から小文字にし、各種変更をgitにcommitしたところ解決しました。ありがとうございました!

投稿2020/03/25 07:00

Lernen

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問