Techioz Blog

Rails プロジェクトを更新した後も Web サイトの出力に変更はありません

概要

https://guides.rubyonrails.org/getting_started.html の指示に従って、Rails に「Hello World」を出力させようとしています。空の Rails プロジェクトから始めてサーバーを実行すると、予想どおり、ローカル ホスト ページに Rails ロゴが表示されます。 HTML アドレスは http:// で、その後に 3 桁の数字、10 進数、1 桁の数字、10 進数、同じ 1 桁の数字、10 進数、異なる 1 桁の数字、コロン、および4桁の数字。次に、次のファイルを追加または編集し、サーバーを再起動します。ただし、ローカルホストページのHTMLアドレスの末尾に「/articles」を追加しても、ローカルサーバーページには変化がありません。 (とはいえ、ページはクラッシュしないので、バグではなくエラーを除外できると思います。)

config/routes.rb:

Rails.application.routes.draw do
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

  # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
  # Can be used by load balancers and uptime monitors to verify that the app is live.
  get "up" => "rails/health#show", as: :rails_health_check

  # Defines the root path route ("/")
  # root "posts#index"
  get "/articles", to: "articles#index"

end

app/controllers/articles_controller.rb:

class ArticlesController < ApplicationController
  def index
  end
end

app/views/articles/index.html.erb:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <style>
      /* Email styles need to be inline */
  </style>
</head>

<body>
  <h1>Hello, Rails!</h1>
</body>
</html>

解決策

まず、基本的なコンテキストです… URL は http://127.0.0.1:3000/… これらの概念がどのように機能するかについての一般的な内訳を次に示します (衒学的コメントで私を攻撃しないでください)。

基本的な URL は次のように構成されています (URL RFC を参照)。 //<ユーザー>:<パスワード>@<ホスト>:<ポート>/ これらの内容のいくつかは、通常、通常のインターネット ユーザーがアドレス バーに入力したり観察したりする種類の URL から省略されているため、馴染みがないかもしれません。 https://spaghetti:[email protected]:443 と http://spaghetti:[email protected]:80 の URL はどちらもウェブブラウザで google.com にアクセスしますが、実際の URL ではありません。 Google 検索にアクセスするために入力することに慣れています。これらが機能するのは、サイトへのアクセスにユーザー名とパスワードの引数が必要ないこと、DNS サーバーがホスト google.com をインターネット上の Google のリモート ホストの IP に変換できること、443 が https リクエストのデフォルトのネットワーク ポートであるためです。 80 は http リクエストのデフォルトのネットワーク ポートです。

最新のブラウザに google.com と入力すると、ホスト引数が解釈され、https プロトコル (ネットワーク上でのデータの送信方法を記述したルール) を使用する必要があると想定されます。 https プロトコルは、https サービスを使用して、IANA ポート番号レジストリで https サービス用に登録されているポートであるポート 443 経由で Web サイトに安全に接続します。

ブラウザが 127.0.0.1 (または localhost) を認識すると、ホストファイルをひどくいじっていない限り、そのホストがローカル マシンであることがわかります。デフォルトの Rails サーバーのポートは 3000 なので、アドレス http://127.0.0.1:3000 はブラウザに「http プロトコルを使用して、ローカル マシンのポート 3000 に移動します」と指示します。

Rails サーバーのルートは http://127.0.0.1:3000/ で実行されていますが、ルート ファイルには、そのアドレスに到達するトラフィックをコントローラー アクションに送信するルートが定義されていません。ルート「posts#index」がコメントアウトされていない場合、ルートに到達するトラフィックはアプリの PostsController 内のインデックス アクションに転送されます。指定したルート ファイルに基づいて、http://127.0.0.1:3000/articles に移動して ArticlesController#index にアクセスする必要があります。そのアドレスにアクセスすると、Rails サーバーを実行しているターミナル タブにリクエストが反映されているのが確認できるはずです。アドレスがホストの後ろ (パスの前) :3000 に連鎖していない場合、ブラウザはデフォルトでポート 80 (サーバーにとって間違ったポート) のリソースにアクセスしようとする可能性があります。

そのアドレスにアクセスしても何も表示されない場合は、ターミナルのサーバー出力に、サーバーが受信しているトラフィックの実行ログとエラーが表示されるはずです (たとえば、ルーティング先のコントローラーのアクション メソッドが定義されていない場合、リクエストはコントローラーのアクションにヒットしますが、最後にレンダリングしようとすると、ビューを定義したファイルが見つからないなどです。

Rails ガイドをよく読んでください。非常によく書かれており、Rails を最大限に活用するために知っておくべきことがすべて網羅されています。