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

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

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

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

Ruby on Rails

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

AWS(Amazon Web Services)

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

Q&A

2回答

3415閲覧

Elastic BeanstalkでRails アプリをデプロイするときにnginxのアセットファイル読み込み場所を追加したい。

nmatsumoto4

総合スコア8

nginx

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

Ruby on Rails

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

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2017/04/10 04:21

Elastic BeanstalkでRailsアプリをデプロイするときに起きた問題に関連しています。

以前に以下の質問をさせていただきました。

<Ruby on Rails × React の組み合わせがAmazon Elastic Beanstalkでデプロイできない>
https://teratail.com/questions/70641?modal=r-comp

デプロイ自体は応急処置により、できたのですが、応急処置なので、恒久的な対応をしたく質問をしました。

【やりたいこと】
AWS公式にある以下にある通り、アセット提供フォルダが/public及び/public/assetsのみとなっています。
これに新たに/public/packというフォルダを加えたいです。

http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_Ruby_rails.html

注記 Elastic Beanstalk は Rails アセットをデフォルトでプリコンパイルします。Ruby 2.1 コンテナタイプについては、次の点に注意してください。 nginx ウェブサーバーは、/public および /public/assets フォルダーからアセットを提供するように事前設定されています。

【背景】
こちらの質問にもあげましたが、Rails5.1で標準対応したWebpackerですが
React用のファイルをコンパイルする際に/public/packにコンパイルされます。
<Ruby on Rails × React の組み合わせがAmazon Elastic Beanstalkでデプロイできない>
https://teratail.com/questions/70641?modal=r-comp

このままデプロイするとデプロイ先では/public/packがアセットされず結果、Reactが動きません。
nginxの設定を変更すれば良いと思うのですが、変更方法がわからず。。。

ご存知の方がおりましたら、ご教示いただけますでしょうか。

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

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

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

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

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

guest

回答2

0

ElasticBeanstalkのNginx設定ファイルは、Rubyプラットフォームの場合、以下のディレクトリにある雛形から作成されるので、.ebextensionsfilesディレクティブで煮るなり焼くなり好きにしてください。

bash:

1$ eb ssh [your-environment-name] 2$ ls -l /opt/elasticbeanstalk/support/conf

ただ、プラットフォームバージョンによってテキストファイルだったりERBだったりするので注意が必要です。

投稿2017/04/18 03:54

編集2017/04/18 04:07
sonodar

総合スコア29

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

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

nmatsumoto4

2017/04/18 04:22

ご回答ありがとうございます。 ご指摘通り.ebextensionsに設定を書くと思うのですが、具体的にどのように書いたら良いかわからず。。。 詳細ご教示いただくことは可能でしょうか。
sonodar

2017/04/18 04:37 編集

質問の意図としては、ebextesionsがわからないということでしょうか?それともnginxの設定方法がわからないということでしょうか? 後者であればまずはeb sshで実際のnginxのテンプレートファイルと、テンプレートから作成された後の/etc/nginx/conf.dのファイルなどをご覧ください。 そこにlocationを追加してrootを/var/app/currentなどにしてあげればいいです。 テンプレートファイルはebextesionsのfilesでパスを指定してあげれば、contentの内容で上書きされます。 ``` files: "/opt/elasticbeanstalk/support/conf/xxxx.conf": mode: "000644" owner: root group: root content: | ここにファイル内容を書く container_command: restart_nginx: command: service nginx reload ``` スマホからなのでちゃんとしたコードを提供できなくて、すみません。
nmatsumoto4

2017/04/21 14:25

度重ねてご回答ありがとうございます! ご指摘通り行ったのですが、惜しいとこまで行って肝心の結果が伴わず、、、 追加でアドバイスいただけますと幸いです。。。 <やったこと> ご指摘通り、./ebextensions/webapp.configを作成 ``` files: "/opt/elasticbeanstalk/support/conf/webapp.conf" : mode: "000644" owner: root group: root content: | upstream my_app { server unix:///var/run/puma/my_app.sock; } server { listen 80; server_name _ localhost; # need to listen to localhost for worker tier location / { proxy_pass http://my_app; # match the name of upstream directive which is defined above proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /assets { alias /var/app/current/public/assets; gzip_static on; gzip on; expires max; add_header Cache-Control public; } ======ここを追加=========== location /pack { alias /var/app/current/public/packs; gzip_static on; gzip on; expires max; add_header Cache-Control public; } ================= location /public { alias /var/app/current/public; gzip_static on; gzip on; expires max; add_header Cache-Control public; } } container_commands: restart_nginx: command: sudo service nginx reload command: echo 'nginx restart' ``` 加えて、./ebextensions/webapp_healthd.configを作成 ``` files: "/opt/elasticbeanstalk/support/conf/webapp_healthd.conf" : mode: "000644" owner: root group: root content: | upstream my_app { server unix:///var/run/puma/my_app.sock; } log_format healthd '$msec"$uri"' '$status"$request_time"$upstream_response_time"' '$http_x_forwarded_for'; server { listen 80; server_name _ localhost; # need to listen to localhost for worker tier if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4; } access_log /var/log/nginx/access.log main; access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd; location / { proxy_pass http://my_app; # match the name of upstream directive which is defined above proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /assets { alias /var/app/current/public/assets; gzip_static on; gzip on; expires max; add_header Cache-Control public; } location /packs { alias /var/app/current/public/packs; gzip_static on; gzip on; expires max; add_header Cache-Control public; } location /public { alias /var/app/current/public; gzip_static on; gzip on; expires max; add_header Cache-Control public; } } container_commands: restart_nginx: command: sudo service nginx reload command: echo 'nginx restart' ``` その後、DeployしてProduction環境で確認するも /packs 以下のフォルダがassetされません。 <確認したこと> eb ssh で以下のファイルが更新されていることを確認しました。 /opt/elasticbeanstalk/support/conf/webapp_healthd.conf /opt/elasticbeanstalk/support/conf/webapp.conf ファイルが更新されているので設定ファイル自体が間違っている訳ではなさそうなのですが、、、、 他に設定ファイルがあるのでしょうか。。。 ご教示いただけますと幸いです。
sonodar

2017/04/22 14:09

/etc/nginx配下のファイルはテンプレート通りに更新されていますか? /etc/nginx配下のファイルを直接編集しながらうまくいった状態のファイルをもとにテンプレートファイルを作成してみてはどうでしょう。 ちなみにElasticbeanstalk環境以外ではそのnginx設定で動いているんですかね? 問題の切り分けできてます?
guest

0

個人的には、nginxからアセットを配信するより、AssetSyncGitHub)のような手段を使って、アセットのような静的ファイルはS3から配信、という方がいいのではないかと思いました。

投稿2017/04/10 04:27

maisumakun

総合スコア145183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問