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

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

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

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

nginx

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

Ruby on Rails

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

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Q&A

解決済

1回答

638閲覧

ImageMagickで生成する画像をパーミッションを変更して生成したい

datiko

総合スコア74

Ruby

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

nginx

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

Ruby on Rails

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

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

0グッド

0クリップ

投稿2022/04/08 07:59

実現したい事

保存された画像2種をImagemagickを使い合成させて画面に表示したい

している事

2枚の画像を合成させて、表示させるWEBアプリを作成しております。

イメージ説明
画像の左側にある二つの画像をImagemagickで合成して表示させる

詰まっている箇所

ローカル環境では画像をImagemagickで合成して画像を生成し、画像合成した画像を遷移先のページで表示させることができた。

本番環境(Nginx)では、画像合成までは完了し、遷移先のページまで飛ぶことまではできましたが、
Image from Gyazo
画像のようにvirtualfitting(id).jpgのパーミッションが600になってしまい、画像のURLを表示しようとした時に403Forbiddenのページに遷移してしまいました。
そこでvirtualfitting10.jpgをターミナル上でchmodコマンドを使いパーミッションを644に変更したところ合成された画像のページに遷移することができました。

なので何らかの形で画像生成する際にファイルのパーミッションを変更して保存する必要があると考えたので
Image from Gyazo
上記画像のように試してみたのですが、うまくいきませんでした。

他にも方法はないかと探しておりますが、中々見つからずどの様に変更すればうまくいくのかわかりません。
わかる方がいらっしゃいましたら、ご教示お願い致します。
よろしくお願い致します。

環境
Maria DB
unicorn
capstorano
ruby on rails
Image magick
mini magick

virtual_fittings_controller.rb

1class VirtualFittingsController < ApplicationController 2 def index 3 if current_user.images.empty? 4 redirect_to root_path 5 else 6 @item = Item.find(params[:item_id]) 7 admin_item = AdminItem.find(@item.admin_item_id.to_s) 8 9 10 user_image = MiniMagick::Image.read(current_user.images[0].download) 11 item_image = MiniMagick::Image.read(admin_item.vrf_images[0].download) 12 13 14 user_image.auto_orient 15 16 result = user_image.composite(item_image) do |config| 17 config.compose 'Over' 18 config.gravity 'NorthWest' 19 config.geometry '+0+0' 20 end 21 22 result.format("jpg") 23 if Rails.env.production? 24 result.write("public/assets/virtualfitting#{current_user.id}.jpg") 25 result.chmod(0644、"testfile"、"out") 26 logger.debug "http://54.168.8.242/assets/virtualfitting#{current_user.id}.jpg" 27 else 28 result.write("public/images/virtualfitting#{current_user.id}.jpg") 29 end 30 end 31 end 32end

index.html.erb

1<%= render "shared/header" %> 2<div class="item-show"> 3 <div class="item-box"> 4 <h2 class="name"> 5 <%= "バーチャル試着機能" %> 6 </h2> 7 8 <div class="virtual-wrap"> 9 <% if Rails.env.production? %> 10 <%= image_tag "/assets/virtualfitting#{current_user.id}.jpg", class: "virtual-image1" %> 11 <% else %> 12 <img src="/images/virtualfitting<%= current_user.id %>.jpg" class="virtual-image1"> 13 <% end %> 14 </div> 15 16 <%= link_to "商品ページに戻る", item_path(@item.id), class:"item-destroy" %> 17  〜以下略〜 18```rails.conf 19upstream app_server { 20 # Unicornと連携させるための設定 21 server unix:/var/www/baton_app5/shared/tmp/sockets/unicorn.sock; 22} 23 24# {}で囲った部分をブロックと呼ぶ。サーバの設定ができる 25server { 26 # このプログラムが接続を受け付けるポート番号 27 listen 80; 28 # 接続を受け付けるリクエストURL ここに書いていないURLではアクセスできない 29 server_name 54.168.8.242; 30 31 # クライアントからアップロードされてくるファイルの容量の上限を2ギガに設定。デフォルトは1メガなので大きめにしておく 32 client_max_body_size 2g; 33 34# 接続が来た際のrootディレクトリ 35 root /var/www/baton_app5/current/public; 36 37 proxy_connect_timeout 3600; 38 proxy_send_timeout 3600; 39 proxy_read_timeout 3600; 40 send_timeout 3600; 41 42# assetsファイル(CSSやJavaScriptのファイルなど)にアクセスが来た際に適用される設定 43 location ^~ /assets/ { 44 gzip_static on; 45 expires max; 46 add_header Cache-Control public; 47 root /var/www/baton_app5/current/public; 48 } 49 50 try_files $uri/index.html $uri @unicorn; 51 52 location @unicorn { 53 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 54 proxy_set_header Host $host; 55 proxy_pass http://app_server; 56 proxy_redirect default; 57 } 58 59 error_page 500 502 503 504 /500.html; 60} 61~

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

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

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

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

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

guest

回答1

0

ベストアンサー

result の Chmod ではなく public/assets/virtualfitting#{current_user.id}.jpg を FileUtils.chmod するのでは?

投稿2022/04/08 09:40

winterboum

総合スコア23324

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

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

datiko

2022/04/08 10:43

FileUtils.chmod(0644,"public/assets/virtualfitting#{current_user.id}.jpg") が正解でした。 ようやく2週間のエラーとの戦いが報われました。。。ありがとうございます。。。
datiko

2022/04/08 10:55

本当にありがとうございます。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問