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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

nginx

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

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

Ruby on Rails

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

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Q&A

解決済

1回答

952閲覧

403 Forbidden nginx/1.18.0 (Ubuntu)のエラーについて

Java_student

総合スコア83

Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

nginx

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

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

Ruby on Rails

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

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

0グッド

0クリップ

投稿2024/09/26 01:03

編集2024/09/27 01:37

実現したいこと

VPSでrailsアプリのアップロードを行いました。
ですが「403 Forbidden nginx/1.18.0 (Ubuntu)」と表示され、サイトが公開されないの解決したいです。

前提

権限をもったユーザーの作成が出来ました。
ドメイン申請やポート開放も行いました。
nginxの記述も行っています。
railsアプリのファイルはすでにダウンロード出来ており、環境構築も完成しました。
SSLの証明書の取得も出来ています。
プロジェクトは/home/ユーザー/直下にアップロードしています。

発生している問題・エラーメッセージ

403 Forbidden nginx/1.18.0 (Ubuntu)

該当のソースコード

調べたところ、DNS設定か、パーミッションか、nginxのドキュメントルートなどの記述ミス等が原因と書かれていたので、nginxの記述を記載させてた抱きます。

server { server_name ドメイン名; # ドメイン名を記載 root /home/ユーザー/プロジェクト; location / { root /home/ユーザー/プロジェクト; index index.html index.htm; } # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /404.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = ドメイン名) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name ドメイン名; return 404; # managed by Certbot }

試したこと

先述にもあるとおり、DNS設定か、パーミッションか、nginxのドキュメントルートなどの記述ミス等が原因と書かれていたので、chmod 701 /home/ユーザーを試しましたが、ダメでした。
Nginxで403 Forbiddenエラーの解決策(Rails+AWS+Nginx+Unicorn環境)

nginxのエラーログも確認しました。
そこで原因になっていそうなログを取り上げました。

sudo

12024/09/26 09:35:25 [error] 175813#175813: *292 open() "/home/ユーザー/railsアプリプロジェクト/favicon.ico" failed (2: No such file or directory), client: 113.1> 22024/09/26 09:35:25 [error] 175813#175813: *292 open() "/home/ユーザー/railsアプリプロジェクト/404.html" failed (2: No such file or directory), client: 113.149.> 32024/09/26 01:13:36 [crit] 175813#175813: *115 SSL_do_handshake() failed (SSL: error:0A00006C:SSL routines::bad key share) while SSL handshaking, client: >

!追記!
railsアプリのトップページが/プロジェクト/app/views/toppages/index.html.erbに存在しているのですが、nginxがそこまで特定できていない可能性はあるでしょうか?

一度、nginxのルートxサーバーのデフォルトにあるvar/www/html/indexをドキュメントルートにしてみましたが、表示されませんでした。
ドキュメントルート以外に問題があると分かりました。

!追記!
root /home/ユーザー/プロジェクト/app/viws/toppages;にしてさらにルートを限定させたのですが、トップページのダウンロードが行われるので元に戻したのですが、URLに飛ぶとトップページのファイルのダウンロードが引き続き行われてしまって元に戻せなくなってしまいました。
これはしばらくすると治る事象でしょうか?

まだ全てを調べきっていないので、後から追記等もすると思います。
すみません。

補足情報(FW/ツールのバージョンなど)

nginx/1.18.0 (Ubuntu)

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

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

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

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

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

dodox86

2024/09/26 02:52 編集

nginxを実行しているユーザーに適していないパーミッションの設定になっているのではないですか? > chmod 701 /home/ユーザーを試しましたが、ダメでした。 chmodコマンドの意味と実行した結果を理解して使っていますか? chmod 701 は、その指定のファイルまたはディレクトリについて、 ・オーナー:(読み取り/書き込み/実行)のアクセスを許す ・グループ:(読み取り/書き込み/実行)のアクセス全てを許さない ・その他:(実行)のみ許す の指定です。尚、対象がディレクトリの場合は実行ではなくてディレクトリ内容の閲覧権限になります。 /home/ユーザー/ 下と合致していないのだと思います。 ※確認の為に chmod 777 ... などと設定しがちですが、運用で安易にそれをやっては”絶対に"ダメです。
Java_student

2024/09/26 03:00

そうなんですか!? すみません。 権限を元に戻すことは可能でしょうか?
dodox86

2024/09/26 03:10

> 権限を元に戻すことは可能でしょうか? chmodコマンドで元のパーミッションの値を指定して実行すればよいです。オーナー自らアクセスできないようにしてしまったファイル等があれば、sudoと併用すれば使えるはずです。尚、元のパーミッションの値はシステムやファイル等のインストール状況によるので私の方では分かりません。 ※前のご質問の流れを軽く読んだ限りですが、プログラムを公開したい気持ちは分かるものの、参考にしたWEBの記事などをそのまま実行しても要望通りにはなりません。内容を理解して消化しないと。それぞれ実行しているコマンドの意味を理解してやらないと最悪、サーバーを壊しますのでお気を付けください。(老婆心から)
Java_student

2024/09/26 03:38

ありがとうございます。 まずは/home/ユーザーのパーミッションを元に戻してみます。
Java_student

2024/09/26 03:56

すみません。 現在のパーミッション701はまだ設定的にリスク等で大丈夫でしょうか?
dodox86

2024/09/26 04:12

> 現在のパーミッション701はまだ設定的にリスク等で大丈夫でしょうか? "まだ設定的にリスク等で大丈夫"、、、すみません、言いまわしが理解できないです。 「この設定にはリスクがある、という認識で正しいですか?」と言う意味でしょうか? 何とも言えませんし、正確には私の方では判断できません。chmod 701 と言う設定内容はどこから来たのでしょうか。何かを参考にしたのですか? その参考にされた記事の内容が質問者さんの事情に合致しているのであれば、適切な設定なのかもしれません。 nginxはとりあえず置いておいて、そのディレクトリはオーナーのみRWX(読み/書き/閲覧)を許し、別のユーザー(その他)は閲覧のみ許す、と言うのであれば、有り得ないことも無い気がします。「その他」は閲覧OKなのに「グループ」が0(全て許さない)、と言うのは謎ですが、運用のルールによっては考えられないこともないです。
Java_student

2024/09/26 04:23

調べたところ、701はディレクトリへのアクセス権のみでした。 ちなみに現在の表示はrwx-------xと表示されています。 https://www.ricecake24book.com/linux-chmod-command/ ユーザーの読み込みの権限が許可されるようにならないとrailsアプリが読み込まれないという認識は駄目でしょうか?
melian

2024/09/26 17:04 編集

> railsアプリのトップページが/プロジェクト/app/views/toppages/index.html.erbに存在しているのですが、 一応、 https://....com/app/views/toppages/index.html.erb で Rails の ERB にアクセスすることはできます。(index.html.erb ファイルがダウンロードされるだけですが) https://....com/index.html https://....com/index.htm にアクセスすると HTTP status code 404 が返るので、ルートディレクトリに設定されている /home/tngr24super-user/tsunageru/ に index.html か index.htm ファイルが存在しないのだと思います。
Java_student

2024/09/27 00:27

それはドキュメントルートを変える必要があるのでしょうか? それともindex.html.erbに変更する必要があるのでしょうか?
Java_student

2024/09/27 01:38

root /home/ユーザー/プロジェクト/app/viws/toppages;にして、さらにルートを限定させてindex.html.erbに変更させたのですが、トップページのダウンロードが行われるので元に戻したのですが、URLに飛ぶとトップページのファイルのダウンロードが引き続き行われてしまって元に戻せなくなってしまいました。 これはしばらくすると治る事象でしょうか?
melian

2024/09/27 01:42

Rails に関しての知識がないのですが、nginx と Rails との連携の設定がされていない様に見受けられます。
Java_student

2024/09/27 01:50 編集

ダウンロードされる件はブラウザキャッシュで解決しました。 他のサイトなどを調べてみると、nginxとrailsに合わせてUnicornを使っている者を発見しました。 unicornとはnginxとrailsを繋ぐ機能をもたらしますでしょうか?
guest

回答1

0

ベストアンサー

Railsアプリの公開までの手順はかなり多いです。
すべてを詳細に説明できないので重要そうなポイントを大まかに整理します。

ドキュメントルート

/home/ユーザー/プロジェクト というパスを前提とすると、

ドキュメントルートは /home/ユーザー/プロジェクト/public になります。
nginxのドキュメントルートの指定をここに設定します。

パーミッション:
一般的にデフォルトでは/home/ユーザーのパーミッション0700となっており、nginxから参照できないため読み取りを許可する必要があります。
そこで/home/ユーザーのパーミッションを711に設定します。

pumaをsystemdで動かす

Railsアプリはpumaを介して動かします。
通常pumaを使用する設定になっているはずです。
開発環境で http://locahost:3000 でRailsアプリが動作しているのはpumaが起動しているからです。
同じように本番環境でもpumaを動かす必要があります。
また本番環境ではproductionモードで起動するのが一般的です。
検索キーワード「rails puma systemd production」

pumaのsystemdの設定について

私が使っているpumaの設定を参考までに記載します。
なお、Gemfileにsd_notifyを追加してbundle installしておく必要があります。

Gemfile

1gem 'sd_notify'

systemdの環境変数を指定するファイル

systemdのUnitファイルのEnviromentを1行ずつ記載するファイル。
数が増えてくるとこちらのほうが楽です。
ファイルのパスは自分で自由に決めてOKですが、ここでは /home/ユーザー/プロジェクト/config/systemd.envとしました。

/home/ユーザー/プロジェクト/config/systemd.env

RAILS_ENV=production RAILS_PORT=Railsのポート番号 RAILS_SERVE_STATIC_FILES=false RAILS_MASTER_KEY=config/master.keyの内容(84a02c2f.... のような文字列)

RAILS_MASTER_KEYはアプリごとに異なります。
ローカル環境にconfig/master.keyがあるかと思いますのでその内容を書いてください。

Unitファイル

[Unit] Description="Puma HTTP Server" After=network.target [Service] # gemのsd_notifyを導入している事を前提としたオプション Type=notify User=ユーザー Group=ユーザーのグループ。一般ユーザーの場合ユーザー名と同じになるはず WatchdogSec=10 WorkingDirectory=/home/ユーザー/プロジェクト EnvironmentFile=/home/ユーザー/プロジェクト/config/systemd.env Restart=always ExecStart=/home/ユーザー/.rbenv/shims/bundle exec pumactl start ExecReload=/bin/kill -TSTP $MAINPID ExecStop=/bin/kill -TERM $MAINPID [Install] WantedBy=sockets.target

nginxとpumaの連携

pumaを起動すると指定したポート番号でRailsアプリが起動します。
nginxではhttpまたはhttpsへのアクセスをProxyを使って http://127.0.0.1:ポート番号 に渡す形になります。
検索キーワード「nginx rails proxy」
ざっくり書くとこんな感じです。

upstream rails-app { server 127.0.0.1:ポート番号; } server { ... root /home/ユーザー/プロジェクト/public; location / { try_files $uri @app; } location @app { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-Server $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_pass http://rails-app; } }

投稿2024/09/27 06:26

編集2024/09/27 07:30
mingos

総合スコア4190

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

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

mingos

2024/09/27 07:29

pumaのenviromentについて追記しました。 私の場合EnviromentをUnitファイルに書くのではなく、環境変数をファイルに記載してそれを読む設定にしています。 /home/ユーザーがrails consoleなどを正常に行えているのであれば、PATHをEnviromentで指定しなくても動くはずです。
Java_student

2024/09/27 08:05

すみません。 pumaを起動できませんでした。 どこが原因かなという心当たりで言うと、/home/ユーザー/プロジェクト/config/systemd.envのポート番号でconfig/puma.rbに記載されているport ENV.fetch("PORT") { 番号 }の部分の番号を記載させて頂いたのですが、こちらはrailsのポート番号に記載するのは不適切だったのでしょうか?
mingos

2024/09/27 08:27

失礼しました。ここは人によって設定が異なります。 私は環境変数RAILS_PORTで設定しているのでそうなっています。 port ENV.fetch("PORT")となっているのであれば、 config/systemd.envのRAILS_PORTをPORTに変更してください。 RAILS_PORT=番号 ↓ PORT=番号
Java_student

2024/09/28 02:03 編集

すみません。 pumaを起動させることが出来ませんでした。 原因を調べているのですが、 sudo systemctl status puma.service 9月 28 10:32:33 systemd[1]: puma.service: Start request repeated> 9月 28 10:32:33 systemd[1]: puma.service: Failed with result 'ex> 9月 28 10:32:33 systemd[1]: Failed to start "Puma HTTP Server". ここら辺を調べているのですが、/home/ユーザー/プロジェクト/config/systemd.envの箇所でenviromentの特定をしている記事なども散見するのですが、enviromentの特定は必要ないのでしょうか?
mingos

2024/09/28 02:25 編集

Railsのenviromentのことであれば、systemd.envにRAILS_ENV=productionを私の例では書いているので問題ないはずです。 あるいはまた別の話でしょうか? あとは起動できないエラーの詳細が不明なのでなんともいえません。 まずsystemdの設定方法に問題があるのか、そもそもRailsの環境構築に問題があるのか分からないのでsystemdではなく直接pumaを起動してみましょう。 systemdを使う理由は、バックグランドで動かしたいからです。 pumaはそのままではバックグラウンドで動かせないため、systemdで動かす必要がありますが 動作確認のためだけなら、手動で動かしても問題ありません。 まずsshでサーバーにログインしてrailsの実行ユーザーになってください。 直接railsのユーザーでsshしている場合はそのままでOKです。 .bash_profileにexport RAILS_ENV=productionを書いておき、 source ~/.bash_profileを実行します。 次回sshログインからはやらなくてOKです。 ※私はCentOS系なので.bash_profileですが別のOSは.bashrcに書くのかもしれません。 railsの実行ユーザーをapp-user、プロジェクト名をsampleとして説明します。 まず環境変数にproductionが設定されている事を確認します。 されていない場合は.bashrcか.bash_profileにexport RAILS_ENV=productionを書いて source .bashrcまたはsource .bash_profileを実行します。 ※productionでdb:create, db:migrateなどは当然やっておかないといけません。 [app-user@host] cd /home/app-user/sample [app-user@host] echo $RAILS_ENV production [app-user@host] bundle exec puma start まずこれでpumaが起動するかどうか確認してください。
melian

2024/09/28 03:02

> student さん > pumaを起動させることが出来ませんでした。 journalctl -u puma とすれば systemctl status puma よりも詳しい状況が判るかと思います。
Java_student

2024/09/28 03:21

[app-user@host] cd /home/app-user/sample [app-user@host] echo $RAILS_ENV production ここまではうまく設定することが出来ましたが、bundle exec puma startで起動した際にエラーが発生したのですが、アプリケーションが設定されていないとされました。 [Master PID] Puma starting in cluster mode... [Master PID] * Puma version: 5.6.7 (ruby 3.2.2-p53) ("Birdie's Version") [Master PID] * Min threads: 5 [Master PID] * Max threads: 5 [Master PID] * Environment: production [Master PID] * Master PID: PID番号 [Master PID] * Workers: 4 [Master PID] * Restarts: (✔) hot (✖) phased [Master PID] * Preloading application 2024-09-28 11:56:02 +0900 [Master PID] ERROR: No application configured, nothing to run !追記! 追記になってしまいますが、何となくcd プロジェクトでrails sで起動を試してみたところ Error loading the 'postgresql' Active Record adapter. Missing a gem it depends on? pg is not part of the bundle. Add it to your Gemfile と表示されたので、これが関連しているのか聞きたくて追記させて頂きました。 !追記! bundle exec puma -C config/puma.rbでも試してみたところ、rails sで表示された同じエラー文が表示されました。 もしこの問題が共通しているのならgemfileのpgを変更してbundleする必要があるという事でしょうか?
mingos

2024/09/28 03:40 編集

bundle exec puma -C config/puma.rb と bundle exec pumactl startはどちらも同じです。 pumactlは自動でconfig/puma.rbを参照してくれます。 pumaでもpumactlのどちらのコマンドでも正しく環境構築が出来ていないとpumaは起動できません。 という事でそもそも正しく環境が構築できていないという事が分かりました。 もしかしてdevelopmentはsqliteでproductionはPostgreSQLみたいな感じになっているのでしょうか。 developmentもPostgreSQLに統一しておいたほうが設定を変えなくて良いのでおすすめです。 Gemfileにpgが記載されている事を確認してbundle installしてください。 このエラーから察するにDBの作成とマイグレーションの実行もされてないと思います。 bundle install bin/rails db:create bin/rails db:migrate が必要かと思います。 しかし、PostgreSQLがインストールされていて正しく設定できないとそもそもdb:createが成功しないと思います。 (1) PostgreSQLをインストールする (2) PostgreSQLにRails用のDBユーザーを作成する(DB作成権限を持つ事) railsのユーザー名ではなくPostgreSQLのユーザーです。 仮にapp_userとします。 sudo su - postgres postgres$ createuser --createdb --pwprompt app_user Enter password for new role: パスワード入力してEnter Enter it again: パスワード入力してEnter (3) config/database.ymlのproductionに記載する productionのところだけ抜き出すとこんな感じです。 ----------------- default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> host: <%= ENV.fetch("RAILS_DATABASE_HOST") { "localhost" } %> port: 5432 # development,testは省略 production: <<: *default database: データベース名 username: app_user password: パスワード ----------------------
Java_student

2024/09/29 02:24 編集

bundle install bin/rails db:create bin/rails db:migrate が出来ました! またbundle exec pumactl startで起動することが出来ました。
mingos

2024/09/29 04:44

起動出来たみたいで良かったです。 pumaが起動している間は、Railsアプリをブラウザから https://ホスト名 で閲覧できる状態になるはずなので確認してください。 見れない場合はnginxの設定が正しくないかもしれません。 最後にsystemdでpumaを起動する設定にすれば完了です。
Java_student

2024/09/29 15:08

すみません。 ngnxの設定を行っているのですが幾つか質問してもよろしいでしょうか? rails-appがプロジェクト名、appがドメイン名に入れるのでしょうか? また127.0.0.1:はそのままでいいのでしょうか。 サーバーにある独自のホストではないという事でしょうか? ポート番号は80で大丈夫でしょうか? それとも独自で設定したポート番号の方が良いのでしょうか? upstream rails-app { server 127.0.0.1:ポート番号; } server { ... root /home/ユーザー/プロジェクト/public; location / { try_files $uri @app; } location @app { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-Server $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_pass http://rails-app; } }
mingos

2024/09/29 15:50 編集

本当は設定内容全部を見せてもらったほうがいいのですが、127.0.0.1はそのままでいいです。 外からはhttpsでアクセスされますが、内部ではhttp://127.0.0.1:ポート番号でRailsアプリが動くのでこれでいいのです。nginxがhttpsで外からアクセスを受けて http://127.0.0.1:ポート番号 と通信するからです。 ポイントをコメントで整理しました。 ------------------ # productionで起動しているpumaのポート番号 # 修正するのはここだけ upstream rails-app { server 127.0.0.1:ポート番号; } server { server_name ドメイン名; root /home/ユーザー/プロジェクト/public; ... listenとかssl証明書のパスの設定とか ... # ここから下は修正しない location / { try_files $uri @app; } location @app { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-Server $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_pass http://rails-app; } }
Java_student

2024/09/30 02:40 編集

繋がることが出来、無事にサイトが表示されました。 このあとpumaの自動起動設定を行う必要があるのでしょうか? sudo systemctl enable pumaで自動起動を行えますでしょうか?
mingos

2024/09/30 05:17 編集

無事にサイトが表示されたようで良かったです。 そうですね。この後は自動起動のためにsystemdでpumaの起動、停止ができるように設定しましょう。 今起動しているpumaは停止して、systemd経由での起動できるようにUnitファイルやconfig/systemd.envを調整します。 確認ポイント1 $ sudo systemctl start puma $ sudo systemctl stopt puma でpumaの起動、停止ができるようになること。 確認ポイント2(自動起動の設定) ※混乱を招きそうなのでこちらのコメントも訂正しておきます。 is-activeと書いていましたが、is-enabledです。 $ sudo systemctl enable puma を実行して、 $ sudo systemctl is-enabled puma enabled と表示される事を確認する。
Java_student

2024/09/30 03:26 編集

確認ポイント1は起動、停止共にできました。 確認ポイント2はinactiveと表示され、サイトもエラーで表示されませんでした。 :エラー表示 {申し訳ありませんが、問題が発生しました。 アプリケーションの所有者の場合は、ログで詳細を確認してください。} これはunitファイル関連でしょうか? $sudo systemctl status puma.service ○ puma.service - "Puma HTTP Server" Loaded: loaded (/etc/systemd/system/puma.service; enabled; vendor preset: > Active: inactive (dead) since Mon 2024-09-30 12:10:57 JST; 1min 19s ago Main PID: 209687 (code=killed, signal=TERM) CPU: 1.791s 9月 30 12:10:56 x162-43-30-66 systemd[1]: Stopping "Puma HTTP Server"... 9月 30 12:10:56 x162-43-30-66 bundle[209687]: [209687] === puma shutdown: 2024> 9月 30 12:10:56 x162-43-30-66 bundle[209687]: [209687] - Goodbye! 9月 30 12:10:56 x162-43-30-66 bundle[209687]: [209687] - Gracefully shutting d> 9月 30 12:10:57 x162-43-30-66 bundle[209687]: [209687] === puma shutdown: 2024> 9月 30 12:10:57 x162-43-30-66 bundle[209687]: [209687] - Goodbye! 9月 30 12:10:57 x162-43-30-66 bundle[209687]: [209687] - Gracefully shutting d> 9月 30 12:10:57 x162-43-30-66 systemd[1]: puma.service: Deactivated successful> 9月 30 12:10:57 x162-43-30-66 systemd[1]: Stopped "Puma HTTP Server". 9月 30 12:10:57 x162-43-30-66 systemd[1]: puma.service: Consumed 1.791s CPU ti> ...skipping...
mingos

2024/09/30 04:07

sudo systemctl status puma.service の結果を見ると正常に起動できていないので、 確認ポイント1が達成できてないようです。 エラーの詳細は、おそらく/var/log/syslogに出力されていると思います。 sudo systemctl start puma.serviceを実行した後、 sudo systemctl status puma.service で、Active: active (running) と表示されたら起動できています。 今回は、Active: inactive (dead) となっているので起動に失敗しています。
melian

2024/09/30 04:27 編集

> $ sudo systemctl enable puma を実行して、 > $ sudo systemctl is-active puma > active enabled の確認であれば is-active ではなく is-enabled でしょう。(一般ユーザ権限での実行が可能です) $ systemctl is-enabled puma enabled もっとも、systemctl status puma で enabled と表示されているので enabled の設定になっています。 > Loaded: loaded (/etc/systemd/system/puma.service; enabled; vendor preset: > SIGTERM で終了しているので systemctl stop puma を実行した状態で systemctl is-active puma を実行したのだと思われます。 > Main PID: 209687 (code=killed, signal=TERM) > Gracefully shutting > Stopped "Puma HTTP Server".
mingos

2024/09/30 04:41 編集

失礼しました。勘違いしていました。 整理します。 起動中しているか : systemctl is-active puma.service => activeなら起動中 自動起動になっているか : systemctl is-enabled puma.service => enabledなら自動起動になっている 確認ポイント2(訂正) systemctl is-enabled puma.service でenabledと表示されたらOKです。
Java_student

2024/09/30 07:56

全て確認が取れました。 ですがエラーが起こっているのでまだ表示されませんでした。 bundle exec pumactl startではサイトが表示されたのですが、自動起動に切り替えるとエラーが起こりました。 プロジェクト/log/production.logで調べてみたところ恐らくpumaかpostgresに関するエラーが発見されました。 [a223c646-4d34-47c7-b982-4dfc5145db44] ActiveRecord::ConnectionNotEstablished (could not translate host name "dpg-ci46r8liuie031gfn000-a" to address: Temporary failure in name resolution ): [a223c646-4d34-47c7-b982-4dfc5145db44] [a223c646-4d34-47c7-b982-4dfc5145db44] app/controllers/toppages_controller.rb:4:in `index'
mingos

2024/09/30 08:32

そうですね。エラーメッセージからデータベースに接続できていないように思われます。 "dpg-ci46r8liuie031gfn000-a"というのは何でしょうか? ここをDBのホスト名として接続しようとしているように見えます。
Java_student

2024/09/30 08:57

すみません。 このホスト名が私も分からず、探しているのですがどこにあるのかが分からずに困っています。 dabase.ymlが下記のようにしています。 ホストを設定していなかったからでしょうか? default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: postgresで設定したユーザー名 password: postgresで設定したユーザーのパスワード production: <<: *default adapter: postgresql encoding: unicode database: データベース名 username: postgresで設定したユーザー名 password: postgresで設定したユーザーのパスワード
mingos

2024/09/30 09:06

たいていデフォルト値が何かしら適用されて通常はlocalhostとか127.0.0.1などが暗黙のうちに使用されてる気がしますが今回は何か違うようですね。 明示的に指定したするべきです。 今回はVPSですからデータベースは自分自身=localhostになります。 host: localhostを追加しておきましょう。 ----------------------------- default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> host: localhost username: postgresで設定したユーザー名 password: postgresで設定したユーザーのパスワード production: <<: *default adapter: postgresql encoding: unicode database: データベース名 username: postgresで設定したユーザー名 password: postgresで設定したユーザーのパスワード
Java_student

2024/09/30 11:20

host: localhostを追加したのですが、エラーは変わりませんでした。 エラー文に書かれているホストはすでに何処かで指定されているのかなとも思いました。 pumaかpostgres関連の記述を探してみます。
Java_student

2024/09/30 12:06 編集

pumaのステータスを確認したのですがhttp://0.0.0.0:3000と表記してあるのですが、これはlocalhostは適用されていないのでしょうか? 単にlocalhostでも同じ表記なだけでしょうか? $ sudo systemctl status puma.service ● puma.service - "Puma HTTP Server" Loaded: loaded (/etc/systemd/system/puma.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2024-09-30 20:43:12 JST; 20min ago Main PID: 214517 (bundle) 9月 30 20:43:12 x162-43-30-66 bundle[214517]: [214517] * Listening on http://0.0.0.0:3000
mingos

2024/09/30 12:13 編集

サーバーには複数のIPアドレスがあります。 127.0.0.1だったり、グローバルIPなど。 ちなみにlocalhostに対応するIPが127.0.0.1です。 0.0.0.0:3000は、サーバーのすべてのIPアドレスで3000ポートでアクセスを受け付けるという事ですので、問題ないです。
Java_student

2024/09/30 12:52

ちなみにsudo systemctl stop pumaとsudo systemctl start pumaでdatabase.ymlの読み込みの為に再起動を行ったのですが、こちらのやり方で読み込まれているでしょうか?
mingos

2024/09/30 13:02

そうですね。 pumaを再起動すれば設定は反映されるはずです。 それでもエラーが出る状況でしょうか?
mingos

2024/09/30 13:22

ちなみにPostgreSQLは正常に動いているでしょうか? rails consoleを起動して何かモデルでSQLを発行してもエラーは起きないでしょうか。 SQLを発行するとは、モデルがItemだとしたらItem.countとかItem.firstなどを実行する事です。 特に問題ないのであればpumaもPostgreSQLも問題ないという事になるので、 systemdのユニットファイルの内容、環境変数の内容くらいか思い当たることがないです。
Java_student

2024/09/30 14:16

すみません。 なぜかbundle と railsのコマンドが見つかりませんになったので、bundleとtailsを入れます。
Java_student

2024/09/30 15:32

すみません。 rubyとbundleを再インストールしました。 pumaとnginxは得に異変は無く無事でした。 rails sとrails c共にuninitialized constant BetterErrors (NameError)というエラーが発生して使えません。 どうにかして解決したいと思います。 お手数をお掛けしてしまい大変、申し訳ありません。
mingos

2024/09/30 15:35

自分では経験した事のないエラーですね。あと一歩って感じなので出来るだけ協力したいと思ってます。 頑張っていきましょう!
melian

2024/09/30 15:39

> [a223c646-4d34-47c7-b982-4dfc5145db44] ActiveRecord::ConnectionNotEstablished (could not translate host name "dpg-ci46r8liuie031gfn000-a" to address: Temporary failure in name resolution): 根本的な解決ではありませんが、/etc/hosts に以下を追加してみてください。(127.0.0.1 と dpg-ci46r8liuie031gfn000-a の間はタブで区切ります) 127.0.0.1 dpg-ci46r8liuie031gfn000-a 追加した後、コマンドラインで以下を実行して結果を確認してください。 host dpg-ci46r8liuie031gfn000-a 以下の様な結果が表示されるかと思います。 dpg-ci46r8liuie031gfn000-a is an alias for localhost. localhost has address 127.0.0.1 これでホスト名 dpg-ci46r8liuie031gfn000-a が IP アドレス 127.0.0.1(localhost)に変換(名前解決)されることになります。
Java_student

2024/09/30 16:09

すみません。 uninitialized constant BetterErrors (NameError)がどうしても解決しません。 プロジェクトを再ダウンロードしてやり直してみても良いでしょうか? おそらくユーザー・nginx・puma・postgres等は入れ直し含めて問題ないのかなとも思うのですが、あまり良くないでしょうか?
mingos

2024/09/30 16:11

ここまでのやり取りから、nginx、PostgreSQLに問題はないと考えています。pumaもですね。 最初からやり直すのも問題ないと思います。 その中で手順や注意点などを自分なりにメモして整理していけばいいと思います。
Java_student

2024/10/01 01:17

一旦、自動起動前まで戻って来れました。 時間を掛けてしまい、すみません。
Java_student

2024/10/01 05:05 編集

すみません。 エラーが発生したのを書き込んだのですが、 /home/ユーザー/プロジェクト/config/systemd.envの編集を行うのを忘れていました。
mingos

2024/10/01 05:17

> socket: /var/run/mysqld/mysqld.sock PostgreSQLを使っているのにmysqlのソケットを指定しているのはおかしいですよね。 > socket: <%= Rails.application.credentials.db[:socket] %> これでは何が指定されるか不明です。 PostgreSQLのsocketファイルのパスを指定してください。 私はdatabase.ymlにsocketの記述はしていません。 ホストとポート番号だけ書いています。 (1) socketの行を削除 (2) host,portを指定 host: localhost port: 5432 これで試してみてください。 PostgreSQLと質問に書いてあったのでその前提で進めてきたのですが、 まさかMySQLを使っているなんて事はないですよね?
Java_student

2024/10/01 05:25 編集

いや以前、それを行った時はソケットの記述を消すのを忘れてしまいました。 ですがその時もpostgresを利用していました。 現在はソケットはありませんし、postgresを利用しています。 混乱させてしまい、申し訳ありません。
Java_student

2024/10/01 05:25 編集

以前のActiveRecord::ConnectionNotEstablished (could not translate host name "dpg-ci46r8liuie031gfn000-a" to address: Temporary failure in name resolution ): app/controllers/toppages_controller.rb:4:in `index' の所まで戻ってきました。 ホストネームが本当にどこで生成しものか分からないので一回、契約しているvpsサーバー側にも問い合わせてみます。
mingos

2024/10/01 12:14

私はこのようなエラーを見たことがないのでなんとも言えませんが、 この記事のエラー内容でもdpg-xxxxというのが出ているので参考になるかもしれません。 しかし、これはdatabase.ymlの話ではないのでそのまま参考になるのか分かりません。 利用しているVPS特有の問題の可能性もあります。 ちなみにどこの会社のVPSを利用していますか?海外のものですか? 私は国内のさくらのVPSを使ってますが、リージョンは存在しないです。
melian

2024/10/01 13:26

その記事にある Render というのは render.com のことです。 Cloud Application Platform for Developers | Render https://render.com/ > Build, deploy, and scale your apps with unparalleled ease - from your first user to your billionth. ところで、この render.com のコミュニティに以下の記事が投稿されています。 Error: ActiveRecord::ConnectionNotEstablished: could not translate host name "dpg-ckm5engu1l6c73f2s23g-a" to address: Name or service not known https://community.render.com/t/error-activerecord-could-not-translate-host-name-dpg-ckm5engu1l6c73f2s23g-a-to-address-name-or-service-not-known/16139 > If the internal hostname isn't being found, this usually points to the service and the database being provisioned in different regions. render.com の場合は国別のリージョンがあって、サービス(例えば Rails)とデータベース(例えば PostgreSQL)が別リージョンに配置されてしまった場合に発生する問題だとのことです。
mingos

2024/10/01 13:31

> melianさん 情報ありがとうございます。 という事は、student さんが使っているのはRenderという事になりそうですね。 ちなみにRenderはVPSではなくPaaSです。 であれば確かにリージョンなどVPSにはない問題が発生しそうです。
Java_student

2024/10/01 14:50 編集

サーバーはxサーバーVPSを利用しています。 こちらもリージョンは存在しないと思われます。 プロジェクトファイルを見てみるとrender.yamlを発見しました。 これは削除しても良いのでしょうか? それとも削除するのは不味いファイルでしょうか?
mingos

2024/10/01 15:01

> studentさん XサーバーのVPSを使っているのになぜrender.yamlがあるのか不明です...。 通常のRailsアプリではrender.yamlは存在しません。 つまり意図的にstudentさんが作らない限り存在しないはずのファイルです。 今回はXサーバーのVPSという事なので、まったく関係ないので削除していいと思います。 問題が起きたらその時にまた考えればいいので。
Java_student

2024/10/01 15:03

すみません。 以前、cloud9からrenderを利用していたのでそれでダウンロードしたプロジェクトファイルの中にrender.yamlが残っていたのかもしれません。 消したと思ったのですが、忘れていました。 迷惑を掛けてしまい申し訳ありません。
mingos

2024/10/01 15:12

事情は承知しました。 そうなるとRailsはrender.yamlが存在するとdatabase.ymlよりもそれを優先するような仕様なのでしょうか?そんな一企業のサービスに依存する実装するなんてありえるのでしょうか...。 いずれにしてもそのrender.yamlは削除していいはずです。
Java_student

2024/10/01 15:15

削除を行ったのですが、エラーは変わりませんでした。 rails db:migrate:resetなどでリセットするかpostgresのデータベースを一回削除してもう一回 bin/rails db:create bin/rails db:migrate をやり直すしたら不備だったりデータの破損が起きるでしょうか?
mingos

2024/10/01 15:29

えーと、まずpostgresの状態を確認したいです。 sudo su - postgres postgres$ psql -l List of databases Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges -------------+----------+----------+-----------------+---------+-------+------------+-----------+----------------------- railsのデータベース名 template0 | postgres | UTF8 | libc | C | C | | | =c/postgres + | | | | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | libc | C | C | | | =c/postgres + という感じで表示されるかと思います。 これはlocalhostのPostgreSQLのデータベース一覧を表示しています。 VPSでPostgreSQLを動かす場合、postgresというユーザーが存在し、その権限でlocalhostでPostgreSQLが動いているはずなのです。
Java_student

2024/10/01 15:32

確認した結果を載せさせていただきます。 List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------------------+------------------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | ja_JP.UTF8 | ja_JP.UTF8 | template0 | postgres | UTF8 | ja_JP.UTF8 | ja_JP.UTF8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF8 | ja_JP.UTF8 | =c/postgres + | | | | | postgres=CTc/postgres プロジェクト_development | ユーザー | UTF8 | ja_JP.UTF8 | ja_JP.UTF8 | プロジェクト_test | ユーザー | UTF8 | ja_JP.UTF8 | ja_JP.UTF8 |
mingos

2024/10/01 15:39 編集

ありがとうございます。 おそらく、database.ymlにproductionのデータベース名は プロジェクト_productionと書かれているのではないでしょうか。 となると、rails db:createがproductionで実行されていないのかなと思いました。 これはRailsの実行ユーザーの.bashrcなどにexport RAILS_ENV=productionと書いて保存しておくか、 bin/rails db:create RAIL_ENV=production で実行する必要があります。 マイグレーションも同様に以下とする必要があります。 bin/rails db:migrate RAIL_ENV=production 公開する環境(本番環境、production)=VPSにおいては、development, testのデータベースが作られる状況というのは通常ありえないので、RAILS_ENVの指定が出来ていないと考えるのが自然です。
Java_student

2024/10/01 15:48 編集

database.ymlにはプロジェクト_developmentと書かれています。 念のために .bash_profile、 .bashrcどちらにも記述してsourceを行いいました。 $ sudo vi .bash_profile $ source .bash_profile $ echo $RAILS_ENV production $ sudo vi .bashrc $ source .bashrc $ echo $RAILS_ENV
mingos

2024/10/01 15:47

OKです。 その場合、bin/rails db:createは、RAILS_ENV=productionを指定したのと同じ事になります。 これは成功すると思います。 まだ存在してないので。 bin/rails db:migrate も実行できるはずです。
Java_student

2024/10/01 15:53 編集

本当にすみません。 下記のエラーが出ました。 ログに出ていた奴と同じです。 プロジェクト_rw28というデータベースを作成しようとしているのが謎です。 $ bin/rails db:create could not translate host name "dpg-ci46r8liuie031gfn000-a" to address: Temporary failure in name resolution Couldn't create 'プロジェクト_rw28' database. Please check your configuration. rails aborted! ActiveRecord::ConnectionNotEstablished: could not translate host name "dpg-ci46r8liuie031gfn000-a" to address: Temporary failure in name resolution (ActiveRecord::ConnectionNotEstablished) Caused by: PG::ConnectionBad: could not translate host name "dpg-ci46r8liuie031gfn000-a" to address: Temporary failure in name resolution (PG::ConnectionBad) Tasks: TOP => db:create (See full trace by running task with --trace)
mingos

2024/10/01 15:56

となると、そもそも何かが致命的に間違っていたという事になってしまいますね...。 申し訳ないですがお手上げです。 dpg-ci46r8liuie031gfn000-aって何って話だし。 どこかにその指定がなければ絶対にあり得ない文字列です。 config/database.ymlに書いてある事以外でRailsが余計な事をするとも思えないし....。
Java_student

2024/10/01 15:57

もう一度、ファイルを隅々探してみます。
Java_student

2024/10/01 16:03 編集

発見しました! .env.productionというファイルに書かれていました。 恐らくrender関連なのかもしれません。 .env.productionごと消した方が良いのでしょうか? それとも中の記述を消すだけで良いでしょうか? DB_PASSWORD = '' DATABASE_URL = 'postgres://プロジェクト:lAUVKDDoFPoGoTxsct9WQmkXIckeSYoO@dpg-ci46r8liuie031gfn000-a/プロジェクト_rw28' RAILS_MASTER_KEY = ''
mingos

2024/10/01 16:08

とりあえずそのファイルを削除して、db:createやってみるのがいいかもしれません。 ググったところでは、.env.productionは、dotenv-railsあたりが関係してそうです。 私は使ったことがないのでなんとも言えません。
Java_student

2024/10/01 16:12

削除したところ、完了しました。 $ bin/rails db:create Database 'tsunageru_development' already exists
mingos

2024/10/01 16:15

これは、productionで実行したかったのに、develpomentで実行されたって話なんです。 どうなってんのかな...。 bin/rails db:create RAILS_ENV=production でも同様でしょうか。 だとすれば、database.ymlのproductionのデータベース名の指定が違うのかな?
Java_student

2024/10/01 16:29 編集

もしかしたらですが、質問を投稿する前にmysqlを入れてdbcreateしてたのですが、それが関わっている可能性はありますか? 調べたところmysqlの中にありました。 mysql> SHOW DATABASES; +-----------------------+ | Database | +-----------------------+ | information_schema | | mysql | | performance_schema | | sys | | プロジェクト | | プロジェクト_development | | プロジェクト_test | +-----------------------+ 7 rows in set (0.07 sec) ですが、database.ymlではpostgresを指定されているのでここでmysqlが絡んでい来るのが分かりませんが。 !追記! Mysqlにあるデータベースは削除しました。
mingos

2024/10/01 16:29

そうなんですよねぇ。PostgreSQLをdatabase.ymlのadapterで指定しているので、mysqlは関係ないはずです。 でも、そのようなデータベースが作成されてるのが意味不明なんです。 まぁだとしてもmysql入れちゃうのはどうかと思いますが...。 mysqlを入れなければその疑いは排除できるわけですから。 あれもこれもやるのは良くないです。 PostgreSQLを使うなら、MySQLはインストールしてはいけません。 MySQLを入れなければ、MySQLが原因かどうか除外できるからです。 MySQLもPostgreSQLも入ってるとなると、回答者としてはもうどうしたらいいか分かりません。 PostrgreSQLでいくのであれば、MySQLは削除してください。 MySQLでいくのであれば、PostgreSQLは削除してください。 両者が存在するのはダメです。 studentさんがいろいろ詳しくなって将来的に両者を使い分けるという未来もありますが 現状ではどちらか1つを使うべきと考えます。 これまでのやりとりから、PostgreSQLでいいと思います。
Java_student

2024/10/01 16:34

本当にすみません。 Mysqlのアンインストールを試みたいと思います。 その前に色々なvpsのデプロイ記事を見ながら行っていたのでその流れでMysqlをインストールしました。
mingos

2024/10/01 16:43

いろいろ試すアブレシッブな姿勢は嫌いじゃないです(笑) 結果的にいろいろな学びになりますからね👍️
Java_student

2024/10/01 16:55

お手数をお掛けしてしまっているのにも関わらず、ありがとうございます。 行った事としましては 1.mysqlのアンインストール 2.Gemfileに記載されているmysql2をコメントアウトにしてbundle installを行いました。 3.再び$ bin/rails db:createを行い、Database 'tsunageru_development' already existsと表示されました。 もう一度postgresのデータベースを探してみます。 また現在の起動したときのエラーに関しましては画像が読み込まれないという別件だったのでこちらも何とか解決します。 !追記! 画像のエラーでenviroment/productionのconfig.assets.compileをtrueに修正し、pumaを再起動させたところエラーが解決されサイトが表示されました! ですが少しモヤモヤするので、postgresにデータベースが作られていると思うので、もう一度データベースを探してみます。
mingos

2024/10/01 17:01

Mysqlをアンインストールしたという事なので、PostgreSQLに焦点を合わせていきましょう。 Gemfileとしてはこの記述が必要です。 gem 'pg' bundle installしましょう。 もう少しで完全に解決しそうな手応えを感じています。
Java_student

2024/10/01 17:06

gem 'pg'はすでにbundle installをしていました。 なのでpostgresにプロジェクト_developmentが作成されているかもという事を疑ってしまいました。 今、サイトが表示されており、最初に bin/rails db:createした際に合わせてseedの実行も行って、今ログインを試したところログインはされているのでデータベースは稼働している様です。 もしかしてプロジェクト_productionで動いているの可能性もありますか?
mingos

2024/10/01 17:17

まず、サイトがちゃんと表示されているという事ですがそれは本当に良い事です! 本来目指す方向はRAILS_ENV=productionなんですね。 データベースとしても、プロジェクト_productionで動いていたらベストです。 productionとdevlopmentの違いとしてはパフォーマンスとかの問題はあります。 でも、小規模なアプリであれば詳細はどうであれサイトがちゃんと見れる事のほうが一番大切です。 したがって、今サイトがちゃんと見れる状態ならそれでOKなんじゃないかと思いました。 これからRailsアプリをいろいろ触っていくうちに点と点がつながって知識が広がっていくのかなって思いました。
Java_student

2024/10/01 17:35

分かりました。 本当にここまでアドバイスや親身になって教えて頂いた、mingosさんとmelianさんには感謝しています。 XサーバーVPSのデプロイ記事などが無かったので本当に手探りでVPSなどの関連記事を探して試行錯誤する日々だったので、初めてサイトが表示された時はとても嬉しかったです。 またrailsアプリのプロジェクトのアップデートもこれから行っていくのでその時のサーバーにあるプロジェクトのアップデート等はまた色々と調べながらやっていきたいと思います。 重ね重ねになりますが、親身にアドバイスや解説をして頂いて本当にありがとうございました。 本当に初心者にも分かりやすい説明でとても勉強になりました! これからも日々、勉強していきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問