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

Aus*_*son 57 ruby-on-rails

我在Ruby on Rails中创建了一个应用程序,现在我希望将其托管.但是,它们要求我使用MySQL并使用sqLite3进行设置.有没有办法将其转换为使用MySQL?

mar*_*lly 117

第0步

为了安全起见,我建议在虚拟机中尝试一下这种技术.为自己节省一大堆心痛,建立一个虚拟机,检查你的代码,并有一个安全的游乐场,如果发生悲剧,你可以扔掉它.

步骤1

制作database.yml文件的备份副本.

(从您的应用程序根目录)

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

第2步

制作数据的备份副本

对于Rails 3,安装YAML DB gem:https://github.com/ludicast/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
Run Code Online (Sandbox Code Playgroud)

将它们更改为

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**
Run Code Online (Sandbox Code Playgroud)

请务必根据您的平台更新asterix包围的值!套接字值仅适用于使用MacPorts的Mac OSX.大多数版本的linux都不需要这个值.

第5步

如果您在以下步骤中遇到一些错误,则可能必须安装mysql gem:

sudo gem install mysql
Run Code Online (Sandbox Code Playgroud)

让rake创建你的数据库

rake db:create
rake db:schema:load
Run Code Online (Sandbox Code Playgroud)

第6步

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

rake db:load

  • 第4步不见了! (9认同)
  • 您确实应该使用db:schema:load而不是db:migrate来创建新数据库. (4认同)
  • 实际上,为什么需要使用虚拟机?我认为你可以将你的整个Rails项目文件夹提交给Git或Mercurial或SVN,甚至将整个文件夹复制到另一个文件夹,包括sqlite DB数据在内的所有数据都可以再次用作Rails应用程序. (4认同)
  • 停止使用 SQLite 进行开发... http://streaming.nfm.id.au/stop-using-sqlite-for-rails-development-ndash/ (2认同)

Dan*_*man 7

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

  • 是的,您需要在新环境中运行rake db:migrate(但是对于任何新环境都是如此,无论它是否是不同的数据库引擎.) (2认同)

小智 6

检查水龙头.我用它成功地将Mysql数据库转换为Postgres - 它应该支持SQLite.

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


Sco*_*ttJ 5

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


Mik*_*ele 5

myproject  user$ cd
user   $ rails new myproject -d mysql
Run Code Online (Sandbox Code Playgroud)

对所有问题说“不”,但Overwrite .../myproject/config/*database.yml*? (enter "h" for help) [Ynaqdh]要说“是”。