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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Ruby

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

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

Q&A

解決済

2回答

507閲覧

Railsで画像がアップロードできない

salud

総合スコア215

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Ruby

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

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

0グッド

0クリップ

投稿2018/10/20 12:11

CentOSに、NginxとUnicornでRailsの構築構築をしました。

そこで、画像のアップロードをすると、
We're sorry, but something went wrong.
のエラーページで落ちてしまいます。

ruby

1def image_upload(id, num, file) 2 if file != nil then 3 o = [('a'..'z'), ('0'..'9')].map { |i| i.to_a }.flatten 4 randstr = (0..7).map { o[rand(o.length)] }.join 5 File.open(Rails.root.join('public', 'media', 'app', id.to_s+'-'+num.to_s+'-'+randstr+'.jpg'), 'wb') do |f| 6 f.write(file.read) 7 end 8 return File.join('public', 'media', 'app', id.to_s+'-'+num.to_s+'-'+randstr+'.jpg') 9 else 10 return nil 11 end 12end

画像のアップロードはこのようなスクリプトで、画像が無いと成功します。

また、debug以上のログ出力設定にした、Railsのログには、何も記録がなく
(というより、その他のデバッグなども何も出力されず、送信ボタンを押す前から何も増えない)
config.consider_all_requests_local = true
にしてみましたが、何も表示されませんでした。

素人考えですが、controllerが全く走らず、その手前で落ちているのかな?という印象です。

一応、UnicornとNginxのログも探してみましたが、何も記録されていないようでした。

何か、他に手がかりを探す方法などありましたが、ご教示いただけますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

情報が足りないので想像ですが、単純に変数 file が nil なのではないでしょうか。
デバッグログをしっかり埋め込むことをお勧めします。

ruby

1def image_upload(id, num, file) 2 if file.present? 3 file_path = jpeg_file_path(id, num) 4 5 File.open(file_path, 'wb') do |f| 6 f.write(file.read) 7 end 8 9 logger.debug 'image upload: file saved to %s' % file_path 10 11 file_path 12 else 13 logger.warn 'image upload: file is empty!' 14 end 15rescue StandardError => e 16 logger.error 'image upload: error: %s' % e 17end 18 19def jpeg_file_path(id, num) 20 file_name = '%d-%d-%s.jpg' % [id, num, rand_str] 21 22 Rails.root.join('public', 'media', 'app', file_name) 23end 24 25def rand_str 26 SecureRandom.hex(4) 27end

File.open が失敗する可能性があるので、rescure で適当に拾っています。

投稿2018/10/21 07:29

ryochin

総合スコア280

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

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

salud

2018/10/21 11:21

同じようにしてみましたが、ログには何も表示されませんでした。 Mac miniで構築しているローカル環境(Rails Server)では問題なくアップロードできるので、 fileがnilになっているとは、どうも思えません。 また、SELinuxを無効にしてみましたが、何も変わりませんでした。
ryochin

2018/10/21 12:34

もしかしたら nginx.conf の client_max_body_size の値が小さすぎる可能性があります。まったくログが記録されないとしたら、ドメイン名を間違えている、iptables でポートが塞がっている等、Rails の外の原因でしょうね。
guest

0

自己解決

nginxの実行ユーザ変更時の弊害だったようです。
お騒がせしました。

投稿2018/11/22 04:13

salud

総合スコア215

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問