将 Ruby on Rails 应用程序从 sqlite 转换为 MySQL?

问题描述 投票:0回答:6

我用 Ruby on Rails 制作了一个应用程序,现在我想托管它。 但是,他们要求我使用 MySQL,并且我使用 sqLite3 进行设置。 有什么办法可以将其转换为使用MySQL吗?

ruby-on-rails
6个回答
119
投票

步骤0

为了安全起见,我建议在虚拟机中尝试一下这种技术。 构建一个虚拟机,检查你的代码,这样你就可以省去很多心痛,并拥有一个安全的游乐场,如果悲剧发生,你可以扔掉它。

步骤1

制作数据库.yml 文件的备份副本。

(来自您的应用程序根目录)

cp config/database.yml config.database.yml.sqlite3

步骤2

制作数据的备份副本

对于 Rails 3,安装 YAML DB gem:https://github.com/ludicast/yaml_db 通过跑步

gem install yaml_db

然后添加到您的 Gemfile 中。

gem 'yaml_db'

对于 Rails 2.x,安装 YAML DB 插件:

script/plugin install git://github.com/adamwiggins/yaml_db.git

运行转储任务

rake db:dump

步骤3

更新您的 config/database.yml 文件。 您会发现类似

的条目
development:
  adapter: sqlite3
  database: db/development.sqlite3
  timeout: 5000
test:
  adapter: sqlite3
  database: db/test.sqlite3
  timeout: 5000
production:
  adapter: sqlite3
  database: db/production.sqlite3
  timeout: 5000

将它们更改为

development:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: **myapp_development**
  pool: 5
  username: **root**
  password: **supersecretpassword**
  **socket: /opt/local/var/run/mysql5/mysqld.sock**
test:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: **myapp_test**
  pool: 5
  username: **root**
  password: **supersecretpassword**
  socket: **/opt/local/var/run/mysql5/mysqld.sock**

production:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: **myapp_production**
  pool: 5
  username: **root**
  password: **supersecretpassword**
  socket: **/opt/local/var/run/mysql5/mysqld.sock**

请务必根据您的平台更新星号包围的值! 套接字值仅适用于使用 MacPorts 的 Mac OSX。 大多数 Linux 版本不需要此值。

步骤5

如果在下面的步骤中出现一些错误,您可能需要安装 mysql 或 mysql2 gem:

sudo gem install mysql

sudo gem install mysql2

让 rake 创建您的数据库

rake db:create
rake db:schema:load

步骤6

使用 YamlDb 将数据重新加载到 MySql 中

rake db:load


7
投票

只要您没有编写任何在 sqlLite3 而不是 MySQL 中运行的 SQL 语句(如果所有数据库访问都是通过 ActiveRecord 和 ActiveRecord 迁移,则不会有这些语句),那么您需要做的就是更改数据库适配器database.yml 配置文件。


6
投票

检查点击。 我已经成功地将 Mysql 数据库转换为 Postgres ——它应该支持 SQLite。

编辑:包括来自 cony 评论的工作链接。


5
投票

如果没有数据要迁移,只需更新database.yml并在新环境中运行'rake db:schema:load'即可。 (不是 db:migrate ,它只能用于增量迁移!)


5
投票
myproject  user$ cd
user   $ rails new myproject -d mysql

对所有问题都说“不”,但对

Overwrite .../myproject/config/*database.yml*? (enter "h" for help) [Ynaqdh]
说“是”。


0
投票

好消息!从 Rails 6 开始,他们添加了一个命令来执行此操作。非常方便。

$ rails db:system:change -h        
Usage:
  bin/rails db:system:change

Options:
  [--to=TO]  # The database system to switch to.

Change `config/database.yml` and your database gem to the target database

示例

$ rails db:system:change --to=mysql
© www.soinside.com 2019 - 2024. All rights reserved.