1

在花了半天时间弄清楚之后,我终于得到了一个连接到 Rails 3.2 应用程序的 MySQL 数据库。

我不明白的是 Rails 如何知道在哪里可以找到数据库?

使用默认的 Sqlite3 非常简单,因为它嵌入在应用程序中,因此只需在database.yml( db/devlopment.sqlite3) 中指定路径即可。

但是,当它是 MySQL 时,我认为我必须指定从 MySQL 命令行创建的数据库的路径。事实证明我不必这样做,我所要做的就是提供数据库的名称和用户登录凭据。

那么当我在 Rails 中运行迁移时,它是如何知道数据库在哪里的呢?

4

3 回答 3

1

这被称为合理的默认值。看看你的database.yml文件,你可能会发现这样一行:

socket = socket: /tmp/mysql.sock

hostAFAIK,如果没有明确显示,则在没有其他参数(例如and 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,你会看到类似“适配器:mysql2”或“适配器:“sqlite”)和必要的信息建立连接.正如@pjam所描述的,用于外部访问mysql服务的协议由模式 mysql://localhost:3306/DB_NAME?user=YOUR_USER_NAME&password=YOUR_PASSWORD 表示,这实际上是适配器设置连接的方式up. 只是它不是由 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 回答