在花了半天的时间后,我终于找到了一个连接到Rails 3.2应用程序的MySQL数据库。
我不明白的是Rails如何知道在哪里找到数据库?
使用默认的Sqlite3,它很容易嵌入到应用程序中,因此只需在 database.yml
(db/devlopment.sqlite3
)中指定路径即可。
但是,当它是MySQL时,我想我必须指定我从MySQL命令行创建的数据库的路径。结果我不必,我所要做的就是给出数据库的名称和用户登录凭据。
因此,当我在Rails中运行迁移时,它如何知道数据库的位置?
答案 0 :(得分:1)
这被称为合理的默认值。看一下你的database.yml
文件,你可能会找到这样的一行:
socket = socket: /tmp/mysql.sock
AFAIK,如果没有明确指出,则在缺少其他参数(例如host
和port
)时将其用作默认值。
答案 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