Rails如何知道MySQL数据库的位置?

时间:2012-10-28 22:13:36

标签: mysql ruby-on-rails ruby-on-rails-3.2 rails-migrations

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

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

使用默认的Sqlite3,它很容易嵌入到应用程序中,因此只需在 database.yml db/devlopment.sqlite3)中指定路径即可。

但是,当它是MySQL时,我想我必须指定我从MySQL命令行创建的数据库的路径。结果我不必,我所要做的就是给出数据库的名称和用户登录凭据。

因此,当我在Rails中运行迁移时,它如何知道数据库的位置?

3 个答案:

答案 0 :(得分:1)

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

socket = socket: /tmp/mysql.sock

AFAIK,如果没有明确指出,则在缺少其他参数(例如hostport)时将其用作默认值。

答案 1 :(得分: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没有完成。

答案 2 :(得分:0)

我相信它可以通过本地数据库的url找到它,类似于

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

所以它只需要DB_NAME,YOUR_USER_NAME& YOUR_PASSWORD,在database.yml

中提供