【问题标题】:Is the Ruby on Rails database stored in the same place as the rails code by default?默认情况下,Ruby on Rails 数据库是否与 rails 代码存储在同一位置?
【发布时间】:2014-02-20 07:23:55
【问题描述】:
我对 Rails 和 Web 开发比较陌生。这是一个简单的概念问题。假设您正在本地机器上开发 rails 代码,然后将代码推送到服务器。默认情况下,您的 Rails 代码是否与应用程序的数据库存储在同一位置?当您第一次推送到远程服务器时,rails 如何知道将数据库放在磁盘上的哪个位置?肯定有默认的,怎么改默认的?
此外,当你第一次创建应用并在本地运行应用时,必须有一个本地数据库,那么当你将代码推送到服务器时究竟会发生什么?
您是否会将数据库放在不同于 rails 代码所在的服务器上?
【问题讨论】:
标签:
ruby-on-rails
rails-postgresql
heroku-postgres
【解决方案1】:
如果您使用 SQLite3(默认但不推荐用于生产),它将存储在 db 文件夹中。在所有其他情况下,数据库将是 Rails 应用程序与之通信的单独的独立服务,例如 Postgresql 服务器。
完全可以使用 SQLite3 进行开发并在生产中使用数据库服务器。它在config/database.yml 中配置。看一下默认值,这很容易解释。但是,我建议在两种环境中使用相同类型的数据库,因为初学者在使用 SQLite 时很容易忘记运行数据库迁移(如果它不存在,SQLite 会即时创建所有内容,而 Rails 使用一系列脚本添加和删除表格/列)。
较大的应用程序肯定会将数据库放置在应用程序本身之外的另一台服务器上。例如,这可以允许独立扩展应用程序服务器和数据库服务器,或者让您在当前数据库服务器出现故障时快速添加新的数据库服务器。
我建议您阅读getting started guide 以了解 Rails 的基础知识。
【解决方案2】:
Rails 与存储数据库的位置无关
它处理本地数据库(用于开发)的事实是偶然的。数据库需要存储在最高效、最快和最具扩展性的环境中;根据您的设置,这可能是本地的,也可能不是本地的
Heroku
正如您在标签中引用 Heroku,您需要知道 Heroku 只使用 Amazon AWS 服务,这意味着您的数据库将存储在同一个数据中心,但在不同的计算平台上
访问这些数据库的方法是通过自定义 URL(检查 heroku config - DATABASE_URL 以查看您的 Heroku 数据库的存储位置)。这意味着 Rails 可以使用 localhost (127.0.0.1:3000) 或外部 IP 连接到数据库
database.yml
config/database.yml 文件包含您应用的所有连接信息:
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
production:
adapter: mysql
encoding: utf8
database: your_db
username: root
password: your_pass
socket: /tmp/mysql.sock
host: your_db_ip #defaults to 127.0.0.1
port: 3306
这 3 个环境允许您为开发、生产等设置不同的数据库。Heroku 默认是“生产”环境,尽管您也可以将其设置为暂存环境
只要你的连接信息正确,你应该可以连接到任何系统
【解决方案3】:
实际数据库所在的位置取决于数据库服务器。例如,mysql 数据库可能与 pgsql 位于不同的目录中。 Rails 知道在哪里可以通过database.yml 找到数据。
此文件指定适配器应如何连接到机器上运行的数据库服务器实例。 Rails 通常遵循客户端服务器模型。即,它将查询发送到您的数据库服务器实例并返回结果。
请注意,数据库服务器实例是一个完全独立于 rails 的进程。如果您将使用 python,您仍然可以通过提供正确的端口号和地址来连接到同一个数据库。数据库实例决定了您的数据实际存储在哪里。
同样,您可以在database.yml 中为多个环境定义不同的设置。当您进入生产环境时,通常会在生产环境下触发 rails。它将在生产标题下查找有关如何连接到数据库并从那里建立连接的说明。因此,开发和生产数据库是独立的。