1

これは、「etc/hosts」ファイルにあるものです。

127.0.0.1 ローカルホスト

127.0.1.1 gotqn-システム製品名

127.0.0.1 depot.yourhost.com

これは、apache2.conf ファイルに追加したものです。

<VirtualHost *:80>

   ServerName depot.yourhost.com

   DocumentRoot "/home/gotqn/Aptana Projects/depot/public/"

   <Directory "/home/gotqn/Aptana Projects/depot/public">

      AllowOverride all

      Options -MultiViews

      Order allow,deny

      Allow from all

   </Directory>

</VirtualHost>

http://localhost/と入力すると、ブラウザーに「var\www」フォルダー内のすべてのファイルが一覧表示され、 http: //depot.yourhost.com/と入力すると、次のエラーが表示されます。

申し訳ございません。不具合が発生しました。

Rails アプリケーションの production.log ファイルを確認したところ、次のように表示されています。

database.yml で指定されたデータベースに接続する

2013-01-13 20:32:41 +0200 で 127.0.0.1 の GET "/" を開始 HTML としての StoreController#index による処理 3ms で 500 内部サーバー エラーを完了

ActiveRecord::StatementInvalid (テーブル「カート」が見つかりませんでした):
app/controllers/application_controller.rb:46:in rescue in current_cart' app/controllers/application_controller.rb:44:in current_cart' app/controllers/store_controller.rb:11:in `index'

テーブルは存在するが見つからないため、データベース構成に問題があると思います。

とにかく、私の質問は、「depot.yourhost.com」がレールアプリケーションを開くことを意味し、「localhost」が私の「var\www」フォルダーをリストすることをホストファイルがどのように認識したかです.RoRはポート3000を使用していると思いました.

ポート 80 の競合がないのはなぜですか?

4

1 に答える 1

1

Rails アプリケーションは、軽量 Webrick サーバーで実行する場合、ポート 3000 で実行されます。mod_passenger を使用して Apache を実行しているため、アプリケーションは Apache 構成に従ってポート 80 で使用できます。

127.0.0.1 depot.yourhost.comホスト ファイルには、そのドメイン名をローカル アダプタ 127.0.0.1 に転送するエントリが含まれています。ホスト ファイルは、名前のアドレスを取得するためにネームサーバーを参照する必要がある前に、常にチェックする必要があります。

次に、Apache の構成には、すべてのネットワーク アダプターVirtualHostでリッスンしている が含まれています。*

<VirtualHost *:80>

Apache 構成は、名前ベースの仮想ホスティングを使用するように設定する必要があります。その後、変数は、へのリクエストによって提供されたリクエスト ヘッダーとServerName照合されます。HTTP_HOSTdepot.yourhost.com

したがって、すべて同じ IP アドレスでポート 80 を使用して、必要な数の を設定できます。Apache は、ヘッダーVirtualHostに基づいてリクエストのルーティング先を決定します。HTTP_HOST

最後に、mod_passenger はDocumentRoot、VirtualHost 構成で指定したディレクトリの内容を調べて、アプリケーションが Ruby on Rails アプリケーションであるかどうかを検出します。publicディレクトリがそのディレクトリとDocumentRootより高いレベルの RoR アプリケーションであることが判明した場合、Passenger は Rails アプリの起動を試みます。

ここで、なぜディレクトリ リストを取得するのかについて説明localhostします... Apache 構成の他の場所には、VirtualHostと一致し、ServerName localhostに設定する が必要DocumentRootです/vart/www

<VirtualHost *:80>
  ServerName localhost
  # or...
  ServerAlias localhost
</VirtualHost>

ディレクトリの内容が403 Forbidden( のようなインデックス ファイルがないindex.html) ではなく一覧表示されている場合は、Apache サーバーの構成または構成に次のディレクティブが含まれてVirtualHostないことが原因です。

Options -Indexes

それをグローバルに追加して、httpd.confサーバー全体のディレクトリをリストしないようにします。

于 2013-01-14T19:05:39.303 に答える