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

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

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

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

AWS(Amazon Web Services)

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

Q&A

0回答

1348閲覧

AWS:RailsアプリでEC2サーバへの画像投稿に失敗

hrc

総合スコア55

Ruby on Rails

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

AWS(Amazon Web Services)

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

0グッド

1クリップ

投稿2016/07/20 01:04

編集2016/07/20 06:41

AWSでRailsのアプリを開発しています。以下の様な状況でやっています。

  • レストランレビューサイト
  • レビュー投稿時に画像も上げる仕組み
  • Elastic BeansTalk で作ったサーバ
  • 今はWebサーバはEC2一台だが今後スケールアウトする可能性あり
  • アプリ内のtmp/filesに一時ファイルをアップ後/assets/images配下にコピーもしくは移動
  • ローカル環境では問題なく移動またはコピーできた
  • AWS-CLIつかってeb deployで毎回githubからdeploy

ここで問題なのですが、ファイルのアップロードが出来ないようです。

アップロードする箇所のソースは以下の通りです。

ruby

1require "securerandom" 2 3class ReviewsController < ApplicationController 4 5 def create 6 7 @review = Review.new(review_params) 8 file = review_params[:file] 9 file_name = file.original_filename 10 ext = File.extname(file_name).downcase 11 new_filename = 'review/' + SecureRandom.hex + ext 12 @review.image1 = new_filename 13 14 result = uploadimage(file, file_name, new_filename) 15 16 respond_to do |format| 17 if result=="success" && @review.save 18 format.html { redirect_to "/#{I18n.locale}/restaurant/#{@review.restaurant_id}", notice: 'Review was successfully created.' } 19 format.json { render :show, status: :created, location: @review } 20 else 21 format.html { redirect_to "/restaurant/#{@review.restaurant_id}", notice: result } 22 23・・・(中略)・・・ 24 25 def uploadimage(file_object, file_name, new_filename) 26 perms = ['.jpeg', '.jpg', '.png', '.gif'] 27 if !perms.include?(File.extname(file_name).downcase) 28 result = I18n.t :error_file_restriction 29 elsif file_object.size > 2.megabyte 30 result = I18n.t :error_file_size_limit 31 else 32 File.open('./tmp/files/'+ file_name, 'wb') do |of| 33 of.write(file_object.read) 34 end 35 File.rename('./tmp/files/'+ file_name, './app/assets/images/' + new_filename) 36 result = "success" 37 end 38 return result 39 end 40 41end

また特にログ上はエラーが出ていないのですが、そもそもファイルが上がらないようです。
フォームからのアップロード直後にtmp/filesには画像ファイルは上がっていませんでした。

File.openのあたりがダメなのかなとはわかっているのですが、手がかりがなく途方に暮れています。どなたかよろしくお願いします。

【追記】EC2のディレクトリ状況

csh

1[ec2-user@ip-172-31-8-184 current]$ ls 2Gemfile README.rdoc app bin config.ru lib public tmp 3Gemfile.lock Rakefile area_id config db log test vendor 4[ec2-user@ip-172-31-8-184 current]$ cd tmp 5[ec2-user@ip-172-31-8-184 tmp]$ ls -la 6合計 16 7drwxr-xr-x 4 webapp webapp 4096 7月 20 00:46 . 8drwxr-xr-x 13 webapp webapp 4096 7月 20 00:46 .. 9drwxr-xr-x 3 webapp webapp 4096 7月 20 00:44 cache 10drwxr-xr-x 2 webapp webapp 4096 7月 20 06:25 files 11[ec2-user@ip-172-31-8-184 tmp]$ pwd 12/var/app/current/tmp

log/production.logの抜粋はこちらです。

log

1I, [2016-07-20T06:25:32.056814 #22912] INFO -- : Parameters: {"utf8"=>"✓", "authenticity_token"=>"VeWAmjaeUgNtASnWcPmJgWikufWhfZc5XVKwCmAjQ2zlXWbQRaieWKhbh9N32TN7A9wS9btqOyHHtF6xgtSyDA==", "review"=>{"title"=>"test0720 1525", "food_rating"=>"1", "decor_rating"=>"1", "service_rating"=>"1", "comment"=>"hahahah", "file"=>#<ActionDispatch::Http::UploadedFile:0x007f2bf50dd900 @tempfile=#<Tempfile:/tmp/RackMultipart20160720-22912-vflx9p.png>, @original_filename="スコア履歴詳細0720.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"review[file]\"; filename=\"\xE3\x82\xB9\xE3\x82\xB3\xE3\x82\xA2\xE5\xB1\xA5\xE6\xAD\xB4\xE8\xA9\xB3\xE7\xB4\xB00720.png\"\r\nContent-Type: image/png\r\n">, "restaurant_id"=>"26", "user_id"=>"8"}, "commit"=>"Create Review", "locale"=>"en"} 2D, [2016-07-20T06:25:32.060935 #22912] DEBUG -- : ^[[1m^[[36m (0.7ms)^[[0m ^[[1mBEGIN^[[0m 3D, [2016-07-20T06:25:32.090755 #22912] DEBUG -- : ^[[1m^[[35mSQL (27.8ms)^[[0m INSERT INTO `reviews` (`restaurant_id`, `user_id`, `food_rating`, `decor_rating`, `service_rating`, `title`, `comment`, `image1`, `created_at`, `updated_at`) VALUES (26, 8, 1, 1, 1, 'test0720 1525', 'hahahah', 'review/894a32b74b99b14a55d2d0d4ea44c511.png', '2016-07-20 06:25:32', '2016-07-20 06:25:32') 4I, [2016-07-20T06:25:32.768627 #22912] INFO -- : Started GET "/images/review/894a32b74b99b14a55d2d0d4ea44c511.png" for 118.238.219.183 at 2016-07-20 06:25:32 +0000 5F, [2016-07-20T06:25:32.770916 #22912] FATAL -- : 6ActionController::RoutingError (No route matches [GET] "/images/review/894a32b74b99b14a55d2d0d4ea44c511.png"): 7 actionpack (4.2.3) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call' 8 actionpack (4.2.3) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 9 railties (4.2.3) lib/rails/rack/logger.rb:38:in `call_app' 10 railties (4.2.3) lib/rails/rack/logger.rb:20:in `block in call' 11 activesupport (4.2.3) lib/active_support/tagged_logging.rb:68:in `block in tagged' 12 activesupport (4.2.3) lib/active_support/tagged_logging.rb:26:in `tagged' 13 activesupport (4.2.3) lib/active_support/tagged_logging.rb:68:in `tagged' 14 railties (4.2.3) lib/rails/rack/logger.rb:20:in `call' 15 actionpack (4.2.3) lib/action_dispatch/middleware/request_id.rb:21:in `call' 16 rack (1.6.4) lib/rack/methodoverride.rb:22:in `call' 17 rack (1.6.4) lib/rack/runtime.rb:18:in `call' 18 activesupport (4.2.3) lib/active_support/cache/strategy/local_cache_middleware 19.rb:28:in `call' 20 activesupport (4.2.3) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call' 21 rack (1.6.4) lib/rack/sendfile.rb:113:in `call' 22 railties (4.2.3) lib/rails/engine.rb:518:in `call' 23 railties (4.2.3) lib/rails/application.rb:165:in `call' 24 passenger (4.0.60) lib/phusion_passenger/rack/thread_handler_extension.rb:74:in `process_request' 25 passenger (4.0.60) lib/phusion_passenger/request_handler/thread_handler.rb:141:in `accept_and_process_next_request' 26 passenger (4.0.60) lib/phusion_passenger/request_handler/thread_handler.rb:109:in `main_loop' 27 passenger (4.0.60) lib/phusion_passenger/request_handler.rb:455:in `block (3 levels) in start_threads' 28I, [2016-07-20T06:26:21.832915 #22912] INFO -- : Started GET "/" for 150.70.173.8 at 2016-07-20 06:26:21 +0000 29I, [2016-07-20T06:26:21.835259 #22912] INFO -- : Processing by FrontpageController#index as */* 30I, [2016-07-20T06:26:21.850473 #22912] INFO -- : Rendered frontpage/index.html.slim within layouts/application (8.8ms) 31I, [2016-07-20T06:26:21.853794 #22912

画像がアップロードされず、app/assets/images配下にもコピー出来ないため画面上はこのようになっております。
no photo

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

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

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

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

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

moonphase

2016/07/20 01:15

File.open()でカレントからのパスになっていますが、 ・CWDはどこになってますか?(この場合RAILS_APPになってないとだめかと) ・Railsアプリの実行ユーザーに./tmp/files/への書き込み権限はありますか? ・エラーログなどがないと何もわかりません(log/配下にあるログファイルの内容を確認してください)
hrc

2016/07/20 06:45

遅くなってすみません。こちら情報を本文にもう少し付記しました。ディレクトリ状況とエラーログです。エラーは抜粋ですが画像のところがエラーで表示できないのだけはわかります。 $RAILS_APPをパスに追加してアップロードできるか確認してみます。カレントがどこになっているのかはちょっとわからないのと、もう少し書き込み権限はec2-userでログインした状態からchmodしてみたけど変更できませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問