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配下にもコピー出来ないため画面上はこのようになっております。
あなたの回答
tips
プレビュー