🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 5

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

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回答

2121閲覧

carrierwaveとS3とherokuを使って本番環境に画像と動画をアップロードしたい

naoki_program

総合スコア5

Ruby on Rails 5

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

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クリップ

投稿2019/11/08 06:01

画像と動画を投稿する機能を入れたいのですが、開発環境ではうまく投稿できたものの、本番環境で投稿する事が出来ずにエラーが出てしまいます。
S3はしっかり登録できていると思います。
![イメージ説明

heroku logs

terminal

12019-11-08T05:31:14.847339+00:00 app[web.1]: F, [2019-11-08T05:31:14.847266 #7] FATAL -- : [b25f058c-d42d-49b9-8fc3-16721852aa87] app/controllers/users_controller.rb:87:in `update' 22019-11-08T05:45:37.479864+00:00 app[web.1]: I, [2019-11-08T05:45:37.479722 #7] INFO -- : [5aac0677-48da-494d-a8c7-39470cd77411] Started PATCH "/users/1" for 49.97.93.117 at 2019-11-08 05:45:37 +0000 32019-11-08T05:45:37.481538+00:00 app[web.1]: I, [2019-11-08T05:45:37.481460 #7] INFO -- : [5aac0677-48da-494d-a8c7-39470cd77411] Processing by UsersController#update as HTML 42019-11-08T05:45:37.481672+00:00 app[web.1]: I, [2019-11-08T05:45:37.481586 #7] INFO -- : [5aac0677-48da-494d-a8c7-39470cd77411] Parameters: {"utf8"=>"✓", "authenticity_token"=>"hsjRigkI4ygHdNqncpax0N/IPv8YcTpNiI7QheJLJ7a9kAxZFjLrgxAD6w4xXc5x3ndGM0sqrkf2Hr02s5NrpQ==", "user"=>{"name"=>"abcdefg", "password"=>"[FILTERED]", "image_name"=>#<ActionDispatch::Http::UploadedFile:0x000055a7c2fffe28 @tempfile=#<Tempfile:/tmp/RackMultipart20191108-7-qtcbrf.jpg>, @original_filename="TOMS526506_TP_V.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[image_name]\"; filename=\"TOMS526506_TP_V.jpg\"\r\nContent-Type: image/jpeg\r\n">}, "commit"=>"変更する", "id"=>"1"} 52019-11-08T05:45:37.484693+00:00 app[web.1]: D, [2019-11-08T05:45:37.484603 #7] DEBUG -- : [5aac0677-48da-494d-a8c7-39470cd77411] User Load (0.9ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] 62019-11-08T05:45:37.487003+00:00 app[web.1]: D, [2019-11-08T05:45:37.486934 #7] DEBUG -- : [5aac0677-48da-494d-a8c7-39470cd77411] User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] 72019-11-08T05:45:37.487596+00:00 app[web.1]: D, [2019-11-08T05:45:37.487523 #7] DEBUG -- : [5aac0677-48da-494d-a8c7-39470cd77411] CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] 82019-11-08T05:45:37.488930+00:00 app[web.1]: D, [2019-11-08T05:45:37.488863 #7] DEBUG -- : [5aac0677-48da-494d-a8c7-39470cd77411] (0.8ms) BEGIN 92019-11-08T05:45:37.494926+00:00 app[web.1]: D, [2019-11-08T05:45:37.494851 #7] DEBUG -- : [5aac0677-48da-494d-a8c7-39470cd77411] User Exists (0.9ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER($1) AND ("users"."id" != $2) LIMIT $3 [["email", "abcdefg@gmail.com"], ["id", 1], ["LIMIT", 1]] 102019-11-08T05:45:37.576046+00:00 app[web.1]: D, [2019-11-08T05:45:37.575906 #7] DEBUG -- : [5aac0677-48da-494d-a8c7-39470cd77411] SQL (1.6ms) UPDATE "users" SET "image_name" = $1, "activation_digest" = $2, "updated_at" = $3 WHERE "users"."id" = $4 [["image_name", "TOMS526506_TP_V.jpg"], ["activation_digest", "$2a$10$gxvP23sAHTfTSm1XkAsktOzVhG9WTuyB7BTZSPieFHJFQ31earhwi"], ["updated_at", "2019-11-08 05:45:37.572718"], ["id", 1]] 112019-11-08T05:45:38.086514+00:00 app[web.1]: D, [2019-11-08T05:45:38.086383 #7] DEBUG -- : [5aac0677-48da-494d-a8c7-39470cd77411] (0.7ms) ROLLBACK 122019-11-08T05:45:38.086911+00:00 app[web.1]: I, [2019-11-08T05:45:38.086816 #7] INFO -- : [5aac0677-48da-494d-a8c7-39470cd77411] Completed 500 Internal Server Error in 605ms (ActiveRecord: 5.5ms) 132019-11-08T05:45:38.090681+00:00 app[web.1]: F, [2019-11-08T05:45:38.089230 #7] FATAL -- : [5aac0677-48da-494d-a8c7-39470cd77411] 142019-11-08T05:45:38.090808+00:00 app[web.1]: F, [2019-11-08T05:45:38.090689 #7] FATAL -- : [5aac0677-48da-494d-a8c7-39470cd77411] Excon::Error::InvalidHeaderValue ("AWS4-HMAC-SHA256 Credential=\n#{ここにアクセスキーが入っていました}\n/20191108/ap-northeast-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-acl;x-amz-content-sha256;x-amz-date, Signature=19c328c51846e4cd3728a349efb2d2874043c036d30495e08a04a8caec1ce82d" contains forbidden "\r" or "\n"): 152019-11-08T05:45:38.090869+00:00 app[web.1]: F, [2019-11-08T05:45:38.090794 #7] FATAL -- : [5aac0677-48da-494d-a8c7-39470cd77411] 162019-11-08T05:45:38.090963+00:00 app[web.1]: F, [2019-11-08T05:45:38.090884 #7] FATAL -- : [5aac0677-48da-494d-a8c7-39470cd77411] app/controllers/users_controller.rb:87:in `update'

gemfile

1source 'https://rubygems.org' 2ruby "2.6.3" 3gem 'rails', '5.1.6' 4gem 'puma', '3.9.1' 5gem 'faker', '1.7.3' 6gem 'bootstrap-sass', '3.3.7' 7gem 'sass-rails', '5.0.6' 8# ページネーション 9gem 'will_paginate' 10# パスワードセキュリティー 11gem 'bcrypt', '~> 3.1.7' 12#validates 日本語化 13gem 'rails-i18n' 14 15#動画配信サービス 16gem 'carrierwave', '1.2.2' 17gem 'fog' 18 19 20#グーグルアナリティクス 21gem 'google-analytics-rails' 22 23gem 'uglifier', '3.2.0' 24gem 'coffee-rails', '4.2.2' 25gem 'jquery-rails', '4.3.1' 26 27gem 'font-awesome-sass' 28gem 'turbolinks', '5.0.1' 29gem 'jbuilder', '2.7.0' 30 31 32group :development, :test do 33 gem 'sqlite3', '1.3.13' 34 gem 'byebug', '9.0.6', platform: :mri 35 gem 'rails-controller-testing' 36end 37 38group :development do 39 gem 'web-console', '3.5.1' 40 gem 'listen', '3.1.5' 41 gem 'spring', '2.0.2' 42 gem 'spring-watcher-listen', '2.0.1' 43end 44 45group :production do 46 gem 'pg', '0.20.0' 47 48end 49 50# Windows環境ではtzinfo-dataというgemを含める必要があります 51# gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

carrier_wave.rb

CarrierWave.configure do |config| if Rails.env.production? config.storage = :fog # キャッシュにS3を指定 config.fog_credentials = { :provider => 'AWS', :aws_access_key_id => ENV['S3_ACCESS_KEY'], :aws_secret_access_key => ENV['S3_SECRET_KEY'], :region => ENV['S3_REGION'], } config.fog_directory = ENV['S3_BUCKET'] config.asset_host = "https://s3.amazonaws.com/#{ENV['S3_BUCKET']}" else config.storage = :file config.fog_directory = ENV['S3_BUCKET'] config.asset_host = "https://s3.amazonaws.com/#{ENV['S3_BUCKET']}" end end

video_uploader.rb

class VideoUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagick support: # include CarrierWave::RMagick # include CarrierWave::FFMPEG # Choose what kind of storage to use for this uploader: #storage :file if Rails.env.production? storage :fog else storage :file end # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end # Provide a default URL as a default if there hasn't been a file uploaded: # def default_url(*args) # # For Rails 3.1+ asset pipeline compatibility: # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) # # "/images/fallback/" + [version_name, "default.png"].compact.join('_') # end # Process files as they are uploaded: # process scale: [200, 300] # # def scale(width, height) # # do something # end # Create different versions of your uploaded files: # Create different versions of your uploaded files: # version :ss do # process :screenshot # def full_filename(for_file = model.logo.file) # "screenshot.jpg" # end # end # version :thumb do # process resize_to_fit: [50, 50] # end # Add a white list of extensions which are allowed to be uploaded. # For images you might use something like this: def extension_whitelist %w(jpg jpeg png wmv mov mp4 flv gif avi) end # Override the filename of the uploaded files: # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # "something.jpg" if original_filename # end end

picture_uploader.rb

class PictureUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagick support: # include CarrierWave::RMagick # include CarrierWave::MiniMagick def default_url "default.png" end # Choose what kind of storage to use for this uploader: if Rails.env.production? storage :fog else storage :file end # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end # Provide a default URL as a default if there hasn't been a file uploaded: # def default_url(*args) # # For Rails 3.1+ asset pipeline compatibility: # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) # # "/images/fallback/" + [version_name, "default.png"].compact.join('_') # end # Process files as they are uploaded: # process scale: [200, 300] # # def scale(width, height) # # do something # end # Create different versions of your uploaded files: # version :thumb do # process resize_to_fit: [40, 40] # end # Add a white list of extensions which are allowed to be uploaded. # For images you might use something like this: # # リサイズしたり画像形式を変更するのに必要 # include CarrierWave::RMagick # # 保存形式をJPGにする # process :convert => 'jpg' # アップロード可能な拡張子のリスト def extension_whitelist %w(jpg jpeg gif png psd) end # Override the filename of the uploaded files: # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # "something.jpg" if original_filename # end end

解決策を教えてください!

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

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

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

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

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

guest

回答1

0

自己解決

環境変数が正しく入れられてなかったみたいで(謎の空白があった)入れ直したら無事投稿できました!

投稿2019/11/10 05:51

naoki_program

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問