1

半日かけて調べた結果、ようやく MySQL データベースを Rails 3.2 アプリに接続することができました。

私が理解していないのは、Rails がデータベースの場所をどのように知っているかということです。

デフォルトの Sqlite3 では、アプリに埋め込まれているので、database.yml( db/devlopment.sqlite3) 内にパスを指定するだけで十分簡単です。

しかし、MySQL の場合は、MySQL のコマンド ラインから作成したデータベースのパスを指定する必要があると思いました。私がしなければならないのは、データベースの名前とユーザーのログイン資格情報を与えることだけです。

では、Rails でマイグレーションを実行すると、データベースがどこにあるかをどのように知るのでしょうか?

4

3 に答える 3

1

これは合理的なデフォルトと呼ばれます。ファイルを確認database.ymlすると、次のような行が見つかる場合があります。

socket = socket: /tmp/mysql.sock

私の知る限り、それが明示的に存在しない場合は、他のパラメーター ( や など) がない場合にデフォルトとして使用されhostますport

于 2012-10-28T22:22:12.343 に答える
1

実際、Rails はそれについて何も知りません。データベースへの接続を処理するモジュールは、Active Record が使用するアダプターです。Rails は database.yml ファイルの場合、すべてのデータベースの可能性に何らかの形で「共通」にするために、一種の「構成規則」のみを提供しますが、内部的にはこの情報を使用して、独自の一意のプロトコルで各データベース接続をセットアップします。SQlite についてはわかりませんが、mysql および mysql2 ハンドラは Rails チームによって管理されていません。

https://github.com/brianmario/mysql2

ここでは、Rails/ActiveRecord が MySql 接続をセットアップするために使用するインターフェースを確認できます。

要するに、Rails にはわかりません。必要なのは、使用するアダプターを推測するために、database.yml に設定した情報だけです (database.yml に移動すると、"adapter: mysql2" または "adapter: "sqlite" のようなものが表示されます) および必要な情報が必要です。 @pjam が説明したように、外部から mysql サービスにアクセスするために使用されるプロトコルは、パターン mysql://localhost:3306/DB_NAME?user=YOUR_USER_NAME&password=YOUR_PASSWORD で表され、これが実際にアダプターが接続を設定する方法ですただ、Rails ではできません。

于 2012-10-28T22:46:16.947 に答える
0

私はそれがあなたのローカルデータベースのURLでそれを見つけると信じています。

mysql://localhost:3306/DB_NAME?user=YOUR_USER_NAME&password=YOUR_PASSWORD

したがって、DB_NAME、YOUR_USER_NAME、および YOUR_PASSWORD のみが必要です。これらは、database.yml

于 2012-10-28T22:18:03.190 に答える