我用 Ruby on Rails 制作了一个应用程序,现在我想托管它。 但是,他们要求我使用 MySQL,并且我使用 sqLite3 进行设置。 有什么办法可以将其转换为使用MySQL吗?
为了安全起见,我建议在虚拟机中尝试一下这种技术。 构建一个虚拟机,检查你的代码,这样你就可以省去很多心痛,并拥有一个安全的游乐场,如果悲剧发生,你可以扔掉它。
制作数据库.yml 文件的备份副本。
(来自您的应用程序根目录)
cp config/database.yml config.database.yml.sqlite3
制作数据的备份副本
对于 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
更新您的 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 版本不需要此值。
如果在下面的步骤中出现一些错误,您可能需要安装 mysql 或 mysql2 gem:
sudo gem install mysql
或
sudo gem install mysql2
让 rake 创建您的数据库
rake db:create
rake db:schema:load
使用 YamlDb 将数据重新加载到 MySql 中
rake db:load
只要您没有编写任何在 sqlLite3 而不是 MySQL 中运行的 SQL 语句(如果所有数据库访问都是通过 ActiveRecord 和 ActiveRecord 迁移,则不会有这些语句),那么您需要做的就是更改数据库适配器database.yml 配置文件。
检查点击。 我已经成功地将 Mysql 数据库转换为 Postgres ——它应该支持 SQLite。
编辑:包括来自 cony 评论的工作链接。
如果没有数据要迁移,只需更新database.yml并在新环境中运行'rake db:schema:load'即可。 (不是 db:migrate ,它只能用于增量迁移!)
myproject user$ cd
user $ rails new myproject -d mysql
对所有问题都说“不”,但对
Overwrite .../myproject/config/*database.yml*? (enter "h" for help) [Ynaqdh]
说“是”。
好消息!从 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