Skip to main content
 首页 » 编程设计

ruby-on-rails之将 Ruby on Rails 应用程序从 sqlite 转换为 MySQL

2024年02月27日41pengyingh

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

请您参考如下方法:

步骤0

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

步骤 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 插件:

脚本/插件安装 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