Rails5.2でsqlite3からmysqlへの移行する方法
若干詰まったところを先に書いておこう
なんか$ bundle exec rake db:migrate
したらエラーがたくさんでた。t.references
が使えなかったり add_index
が使えなかったりした。db作る時にadd_index
されないとかなり困る。てことで、とりあえず、こんな感じで修正した。
変更前
db/migrate/20181002072214_create_microposts.rb
class CreateMicroposts < ActiveRecord::Migration[5.0]
def change
create_table :microposts do |t|
t.text :content
t.integer :user_id, foreign_key: true
t.timestamps
end
add_index :microposts, [:user_id, :created_at], unique: true
end
end
変更後
db/migrate/20181002072214_create_microposts.rb
class CreateMicroposts < ActiveRecord::Migration[5.0]
def change
create_table :microposts do |t|
t.text :content
t.integer :user_id, foreign_key: true
t.timestamps
end
add_index :microposts, [:user_id, :created_at], unique: true
end
end
あとは楽勝だった
config/database.yml
# SQLite version 3.x
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
#
default: &default
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
development:
adapter: mysql2
encoding: utf8
database: test13_development
pool: 5
username: root
password:
socket: /tmp/mysql.sock
test:
adapter: mysql2
encoding: utf8
database: test13_test
pool: 5
username: root
password:
socket: /tmp/mysql.sock
production:
<<: *default
database: db/production.sqlite3
gemファイルも直す
group :development, :test do
#gem 'sqlite3', '1.3.13'
gem 'mysql2'
出現したエラー
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql2::Error: Table 'lang_sns10_development.user' doesn't exist: CREATE UNIQUE INDEX `my_index` ON `user` (`user_id`, `created_at`)
/Users/ryosuke/Desktop/rails-project-we-are/db/migrate/20181002072214_create_microposts.rb:9:in `change'
/Users/ryosuke/.rbenv/versions/2.5.1/bin/bundle:23:in `load'
/Users/ryosuke/.rbenv/versions/2.5.1/bin/bundle:23:in `<main>'
Caused by:
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'lang_sns10_development.user' doesn't exist: CREATE UNIQUE INDEX `my_index` ON `user` (`user_id`, `created_at`)
/Users/ryosuke/Desktop/rails-project-we-are/db/migrate/20181002072214_create_microposts.rb:9:in `change'
/Users/ryosuke/.rbenv/versions/2.5.1/bin/bundle:23:in `load'
/Users/ryosuke/.rbenv/versions/2.5.1/bin/bundle:23:in
`<main>'
-- create_table(:microposts, {:options=>"ENGINE=InnoDB", :id=>:integer})
-> 0.0141s
-- add_index(:microposts, ["user_id", "created_at"], {:unique=>true})
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql2::Error: Key column 'user_id' doesn't exist in table: CREATE UNIQUE INDEX `index_microposts_on_user_id_and_created_at` ON `microposts` (`user_id`, `created_at`)
/Users/ryosuke/Desktop/rails-project-we-are/db/migrate/20181002072214_create_microposts.rb:10:in `change'
/Users/ryosuke/.rbenv/versions/2.5.1/bin/bundle:23:in `load'
/Users/ryosuke/.rbenv/versions/2.5.1/bin/bundle:23:in `<main>'
Caused by:
ActiveRecord::StatementInvalid: Mysql2::Error: Key column 'user_id' doesn't exist in table: CREATE UNIQUE INDEX `index_microposts_on_user_id_and_created_at` ON `microposts` (`user_id`, `created_at`)
/Users/ryosuke/Desktop/rails-project-we-are/db/migrate/20181002072214_create_microposts.rb:10:in `change'
/Users/ryosuke/.rbenv/versions/2.5.1/bin/bundle:23:in `load'
/Users/ryosuke/.rbenv/versions/2.5.1/bin/bundle:23:in `<main>'
Author And Source
この問題について(Rails5.2でsqlite3からmysqlへの移行する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/rh_/items/028f39d9c52b49f53aeb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .