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

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

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

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

解決済

1回答

1228閲覧

railのapiモードを本番環境で使用する際には[rails assets:precompile]は必要なのか知りたいです

senseIY

総合スコア281

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

1グッド

2クリップ

投稿2022/08/24 23:59

編集2022/08/25 00:24

前提

以前の質問の内容と関係(やや質問が異なるため別に質問させていただきます。また、かなり質問が長く文字数制限に引っかかる可能性があるのでここでは一部のみ上げさせていただきます。)しているのですが、Railsの本番環境をローカル環境で再現できるか試しているのですが、うまくいかずエラーが出てしまいます。私はRailsのAPIモードを使用しているのですが、この場合[rails assets:precompile]コマンドは必要なのでしょうか?

このGithubの議論を参考に以下を試しました
以下をGemfileに追記

gem 'sass-rails' gem 'uglifier' gem 'coffee-rails'

application.rbに追記

require 'sprockets/railtie'

これで再度buildしましたが、

yml

1api_1 | For more information see: https://github.com/rails/sprockets/blob/070fc01947c111d35bb4c836e9bb71962a8e0595/UPGRADING.md#manifestjs 2api_1 | bundler: failed to load command: puma (/usr/local/bundle/bin/puma) 3api_1 | /usr/local/bundle/gems/sprockets-rails-3.4.2/lib/sprockets/railtie.rb:110:in `block in <class:Railtie>': Expected to find a manifest file in `app/assets/config/manifest.js` (Sprockets::Railtie::ManifestNeededError) 4api_1 | But did not, please create this file and use it to link any assets that need 5api_1 | to be rendered by your app: 6api_1 | 7api_1 | Example: 8api_1 | //= link_tree ../images 9api_1 | //= link_directory ../javascripts .js 10api_1 | //= link_directory ../stylesheets .css 11api_1 | and restart your server 12api_1 |

以下のエラーが発生してしまいました。assetsフォルダがないといけないようです。APIモードではassetsフォルダはいらないはずです
Railsガイドを見ましたが、APIモードについての言及はありませんでした。また、この記事からAPIモードではrails assets:precompileは不要なのではないかと推測しました。

ちなみにprecompile無しでそのまま[docker-compose -f docker-compose.production.yml up]すると、以下のエラーが発生してしまいます。このエラーがassets precompileしていないことが原因なのかどうか問題の切り分けをしています。

yml

1api_1 | ! Unable to load application: I18n::InvalidLocaleData: can not load translations from /usr/local/bundle/bundler/gems/devise_token_auth-1a0483fbd125/config/locales/ja.yml: #<Psych::SyntaxError: (<unknown>): did not find expected key while parsing a block mapping at line 20 column 7> 2api_1 | bundler: failed to load command: puma (/usr/local/bundle/bin/puma) 3api_1 | /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:254:in `rescue in load_yml': can not load translations from /usr/local/bundle/bundler/gems/devise_token_auth-1a0483fbd125/config/locales/ja.yml: #<Psych::SyntaxError: (<unknown>): did not find expected key while parsing a block mapping at line 20 column 7> (I18n::InvalidLocaleData) 4api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:246:in `load_yml' 5api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:228:in `load_file' 6api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:17:in `block in load_translations' 7api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:16:in `each' 8api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:16:in `load_translations' 9 10~省略 11api_1 | from /usr/local/bin/bundle:25:in `load' 12api_1 | from /usr/local/bin/bundle:25:in `<main>' 13api_1 | /usr/local/lib/ruby/3.1.0/psych.rb:455:in `parse': (<unknown>): did not find expected key while parsing a block mapping at line 20 column 7 (Psych::SyntaxError) 14api_1 | from /usr/local/lib/ruby/3.1.0/psych.rb:455:in `parse_stream' 15api_1 | from /usr/local/lib/ruby/3.1.0/psych.rb:399:in `parse' 16api_1 | from /usr/local/lib/ruby/3.1.0/psych.rb:272:in `unsafe_load' 17api_1 | from /usr/local/bundle/gems/bootsnap-1.13.0/lib/bootsnap/compile_cache/yaml.rb:151:in `input_to_storage' 18api_1 | from /usr/local/bundle/gems/bootsnap-1.13.0/lib/bootsnap/compile_cache/yaml.rb:254:in `fetch' 19api_1 | from /usr/local/bundle/gems/bootsnap-1.13.0/lib/bootsnap/compile_cache/yaml.rb:254:in `unsafe_load_file' 20api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:249:in `load_yml' 21api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:228:in `load_file' 22api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:17:in `block in load_translations' 23api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:16:in `each' 24api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:16:in `load_translations' 25api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/simple.rb:77:in `init_translations' 26api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/simple.rb:62:in `eager_load!' 27api_1 | from /usr/local/bundle/gems/i18n-1.12.0/lib/i18n.rb:91:in `eager_load!' 28api_1 | from /usr/local/bundle/gems/railties-7.0.3.1/lib/rails/application/finisher.rb:75:in `each' 29api_1 | from /usr/local/bundle/gems/railties-7.0.3.1/lib/rails/application/finisher.rb:75:in `block in <module:Finisher>' 30api_1 | from /usr/local/bundle/gems/railties-7.0.3.1/lib/rails/initializable.rb:32:in `instance_exec' 31api_1 | from /usr/local/bundle/gems/railties-7.0.3.1/lib/rails/initializable.rb:32:in `run' 32api_1 | from /usr/local/bundle/gems/railties-7.0.3.1/lib/rails/initializable.rb:61:in `block in run_initializers' 33api_1 | from /usr/local/lib/ruby/3.1.0/tsort.rb:228:in `block in tsort_each' 34api_1 | from /usr/local/lib/ruby/3.1.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component' 35api_1 | from /usr/local/lib/ruby/3.1.0/tsort.rb:431:in `each_strongly_connected_component_from' 36api_1 | from /usr/local/lib/ruby/3.1.0/tsort.rb:349:in `block in each_strongly_connected_component' 37api_1 | from /usr/local/lib/ruby/3.1.0/tsort.rb:347:in `each' 38api_1 | from /usr/local/lib/ruby/3.1.0/tsort.rb:347:in `call' 39api_1 | from /usr/local/lib/ruby/3.1.0/tsort.rb:347:in `each_strongly_connected_component' 40api_1 | from /usr/local/lib/ruby/3.1.0/tsort.rb:226:in `tsort_each' 41api_1 | from /usr/local/lib/ruby/3.1.0/tsort.rb:205:in `tsort_each' 42api_1 | from /usr/local/bundle/gems/railties-7.0.3.1/lib/rails/initializable.rb:60:in `run_initializers' 43api_1 | from /usr/local/bundle/gems/railties-7.0.3.1/lib/rails/application.rb:372:in `initialize!' 44api_1 | from /myapp/config/environment.rb:5:in `<top (required)>' 45api_1 | from config.ru:3:in `require_relative' 46api_1 | from config.ru:3:in `block in <main>' 47api_1 | from /usr/local/bundle/gems/rack-2.2.4/lib/rack/builder.rb:116:in `eval' 48api_1 | from /usr/local/bundle/gems/rack-2.2.4/lib/rack/builder.rb:116:in `new_from_string' 49api_1 | from /usr/local/bundle/gems/rack-2.2.4/lib/rack/builder.rb:105:in `load_file' 50api_1 | from /usr/local/bundle/gems/rack-2.2.4/lib/rack/builder.rb:66:in `parse_file' 51api_1 | from /usr/local/bundle/gems/puma-5.6.4/lib/puma/configuration.rb:348:in `load_rackup' 52api_1 | from /usr/local/bundle/gems/puma-5.6.4/lib/puma/configuration.rb:270:in `app' 53api_1 | from /usr/local/bundle/gems/puma-5.6.4/lib/puma/runner.rb:150:in `load_and_bind' 54api_1 | from /usr/local/bundle/gems/puma-5.6.4/lib/puma/single.rb:44:in `run' 55api_1 | from /usr/local/bundle/gems/puma-5.6.4/lib/puma/launcher.rb:182:in `run' 56api_1 | from /usr/local/bundle/gems/puma-5.6.4/lib/puma/cli.rb:81:in `run' 57api_1 | from /usr/local/bundle/gems/puma-5.6.4/bin/puma:10:in `<top (required)>' 58api_1 | from /usr/local/bundle/bin/puma:25:in `load' 59api_1 | from /usr/local/bundle/bin/puma:25:in `<top (required)>' 60api_1 | from /usr/local/lib/ruby/3.1.0/bundler/cli/exec.rb:58:in `load' 61api_1 | from /usr/local/lib/ruby/3.1.0/bundler/cli/exec.rb:58:in `kernel_load' 62api_1 | from /usr/local/lib/ruby/3.1.0/bundler/cli/exec.rb:23:in `run' 63api_1 | from /usr/local/lib/ruby/3.1.0/bundler/cli.rb:484:in `exec' 64api_1 | from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run' 65api_1 | from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command' 66api_1 | from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor.rb:392:in `dispatch' 67api_1 | from /usr/local/lib/ruby/3.1.0/bundler/cli.rb:31:in `dispatch' 68api_1 | from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start' 69api_1 | from /usr/local/lib/ruby/3.1.0/bundler/cli.rb:25:in `start' 70api_1 | from /usr/local/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/libexec/bundle:48:in `block in <top (required)>' 71api_1 | from /usr/local/lib/ruby/3.1.0/bundler/friendly_errors.rb:103:in `with_friendly_errors' 72api_1 | from /usr/local/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/libexec/bundle:36:in `<top (required)>' 73api_1 | from /usr/local/bin/bundle:25:in `load' 74api_1 | from /usr/local/bin/bundle:25:in `<main>' 75redictum_ver-20_api_1 exited with code 1

私の予想ですが、やはりrailsのAPIモードを使用する際には、本番環境であってもrails assets:precompile はいらないように思えます。とりあえず今発生しているエラーの原因を切り分けたいのでAPIモードにrails assets:precompileは必要なのか知りたいです。
何かしらアドバイスがあればよろしくお願いいたします。

shinoharat👍を押しています

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

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

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

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

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

maisumakun

2022/08/25 00:55

> このエラーがassets precompileしていないことが原因なのかどうか問題の切り分けをしています。 とりあえず、こちらのエラーの対処を行ってはみたのですか? (assets precompileのエラーがこのエラーより前段階で出るものだとすれば、先にassets precompileのエラーが出たことで、こちらの問題が「見えていないだけ」という可能性もあります)
senseIY

2022/08/25 01:15

はい。とりあえずは行ってみました。以下に追記していきます。 1 まず、ローカル環境では正常に動作します。 2  docker-compose -f docker-compose.production.yml up(申し訳ございません。docker-compose.production.ymlは字数制限上載せられませんでした。上の以前の質問というリンクから確認して頂けると幸いです。)というコマンドを実行すると、一応rails(api) front(react typescript) db web(nginx)は起動はします。しかし、すぐにrailsのコンテナが以下のエラー(長いので一部のみ)を吐きすぐに停止してしまいます。 ``` api_1 | ! Unable to load application: I18n::InvalidLocaleData: can not load translations from /usr/local/bundle/bundler/gems/devise_token_auth-1a0483fbd125/config/locales/ja.yml: #<Psych::SyntaxError: (<unknown>): did not find expected key while parsing a block mapping at line 20 column 7> api_1 | bundler: failed to load command: puma (/usr/local/bundle/bin/puma) api_1 | /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:254:in `rescue in load_yml': can not load translations from /usr/local/bundle/bundler/gems/devise_token_auth-1a0483fbd125/config/locales/ja.yml: #<Psych::SyntaxError: (<unknown>): did not find expected key while parsing a block mapping at line 20 column 7> (I18n::InvalidLocaleData) ``` そのため、nginxの画面に行ってもBad Gatewayになってしまい、railsとnginxのコンテナが正常に動いているかどうか分かりません。ですが、 ``` senseiy@senseIY-wsl:~/Studio/reDictum_ver-2.0$ docker-compose -f docker-compose.production.yml exec web nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful senseiy@senseIY-wsl:~/Studio/reDictum_ver-2.0$ docker-compose -f docker-compose.production.yml exec web curl example.com <!doctype html> <html> <head> <title>Example Domain</title> <meta charset="utf-8" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> body { background-color: #f0f0f2; margin: 0; padding: 0; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; } div { width: 600px; margin: 5em auto; padding: 2em; background-color: #fdfdff; border-radius: 0.5em; box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02); } a:link, a:visited { color: #38488f; text-decoration: none; } @media (max-width: 700px) { div { margin: 0 auto; width: auto; } } </style> </head> <body> <div> <h1>Example Domain</h1> <p>This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.</p> <p><a href="https://www.iana.org/domains/example">More information...</a></p> </div> </body> </html> ``` この結果からnginxは作動はしていると考えました。つまり、今起きているのはpumaコマンドを読み込まないというエラーのみ(これから追加で出てくるかもしれませんが)になります。また、この時 docker-compose -f docker-compose.production.yml up のようにassets precompileをせずに動かしています。 また、RAILS_ENV=productionをつけても($ docker-compose -f docker-compose.production.yml run api RAILS_ENV=produc tion) ``` /usr/bin/entrypoint.sh: line 8: exec: RAILS_ENV=production: not found ``` のようになります。 そのため、precompileをしていないからこのエラーが出ているのではないかと考えました。もしprecompileがAPIモードで必要ないならこのエラーは別の要因があることになります。pumaのエラーは現在デバッグ中なのでまだ対処できていません。
maisumakun

2022/08/25 01:20

> 今起きているのはpumaコマンドを読み込まないというエラーのみ エラーは「中身のRailsが死んだからPumaも死んだ」と読めました。Pumaサイドの問題ではなくRailsの問題です。
senseIY

2022/08/25 01:45 編集

もしかするとそうなのかもしれませんが、何点か共有したいことがあるので補足させてください。 1 <Psych::SyntaxError>について(すみませんこのエラーは解決できたので無視してください。) 先ほど共有したエラーで、このエラーがpumaのエラーよりも先に発生していましたが、これはどうやらymlファイルのシンタックスエラーのようです。しかし、私はここで警告を受けている /usr/local/bundle/bundler/gems/devise_token_auth-1a0483fbd125/config/locales/ja.yml: というファイルをローカル環境で使用していません。また、関係がないかもしれませんが、このPsych::SyntaxErrorはHerokuへのデプロイを試みた(失敗したが)時にも発生し解決できませんでした。このHerokuにデプロイする際にもassets precompileを行わなかったのでそれが原因なのではないかと考えています(違うかもしれませんが) 2 なぜかRails(Mysql)などのデータベースのデータが消えたり戻ったりする  関係がないかもしれませんが、稀に保存されているはずの情報が消えます。再起動すると直る(今までは直った=元々入っていたデータが復活した)のですが、 docker-compose -f docker-compose.production.yml up を使用してからなぜかrails と frontecd(axios)の間でローカル環境でもエラーが出てしまい、これも再起動すると直りました。またなぜかPCの起動が上手くいかなくなり、回復キーの入力を求められるようになりました(内容は覚えていないのですが、本体の整合性に関するものだったような気がします)。 追記 どうやらdocker-compose.production.ymlファイルで ``` api: build: context: ./backend/ dockerfile: Dockerfile command: bash -c "rm -f tmp/pids/server.pid && bundle exec puma -C ./backend/config/puma.rb -e production" volumes: - ./backend:/myapp - ./backend/vendor/bundle:/myapp/vendor/bundle environment: TZ: Asia/Tokyo RAILS_ENV: production # ports: # - "3001:3000" depends_on: - db stdin_open: true tty: true env_file: - .env user: root ``` ./backend/config/puma.rb -e production"が以前はconfig/puma.rb -e production"だったのが原因でエラーになっていたようです。よって<Psych::SyntaxError>は消えました。ですが、以前として ``` api_1 | bundler: failed to load command: puma (/usr/local/bundle/bin/puma) api_1 | /usr/local/bundle/gems/puma-5.6.4/lib/puma/dsl.rb:83:in `read': No such file or directory @ rb_sysopen - ./backend/config/puma.rb (Errno::ENOENT) ``` このエラーが発生しているようです。現在デバッグ中です。
guest

回答1

0

ベストアンサー

API モードなら assets:precompile は不要です。

Gemfile

1gem 'sass-rails' 2gem 'uglifier' 3gem 'coffee-rails'

application.rb

1require 'sprockets/railtie'

もすべて不要なので消してよいと思います。

投稿2022/08/25 01:43

編集2022/08/25 01:47
shinoharat

総合スコア1676

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

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

senseIY

2022/08/25 01:50

回答して頂きありがとうございます。まだエラーのデバッグは終わっていませんが、タイトルの「railのapiモードを本番環境で使用する際には[rails assets:precompile]は必要なのか知りたいです」というのは解決したので一旦この投稿は解決済みにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問