Переход от SQLite к PostgreSQL в новом проекте Rails

У меня есть приложение rails, что базы данных находятся в SQLite (Dev и production). Поскольку я перехожу к heroku, я хочу преобразовать свою базу данных в PostgreSQL.

В любом случае, я слышал, что локальная база разработки не нуждается в изменении от SQLite, поэтому мне не нужно ее менять, однако, как мне пойти по поводу изменения производственной среды от SQLite до PostgreSQL?

Кто-нибудь когда-либо делал это раньше и может помочь?

P.S. Я не уверен, что именно этот процесс называется, но я слышал о переходе базы данных из SQLite на PostgreSQL, это то, что нужно сделать?

Ответ 1

Вы можете изменить свой database.yml на это вместо использования sqlite из коробки:

development:
  adapter: postgresql
  encoding: utf8
  database: project_development
  pool: 5
  username: 
  password:

test: &TEST
  adapter: postgresql
  encoding: utf8
  database: project_test
  pool: 5
  username: 
  password:

production:
  adapter: postgresql
  encoding: utf8
  database: project_production
  pool: 5
  username: 
  password:

cucumber:
  <<: *TEST

Ответ 2

Следующие шаги работали для меня. Он использует драгоценный камень кранов, созданный Heroku и упомянутый в Ryan Bates Railscast # 342. Есть несколько шагов, но он работал отлично (даже даты были правильно перенесены), и это было намного проще, чем Oracle- > DB2 или SQL Server → миграции Oracle, которые я делал в прошлом.

Обратите внимание, что SQLite не имеет идентификатора пользователя или пароля, но метка драгоценных камней требует чего-то. Я просто использовал литералы "пользователь" и "пароль".

Создать пользователя базы данных Postgres для новых баз данных

$ createuser f3
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y

EDIT - обновленная команда ниже - используйте это вместо

$ createuser f3 -d -s

Создать необходимые базы данных

$ createdb -Of3 -Eutf8 f3_development
$ createdb -Of3 -Eutf8 f3_test

Обновить Gemfile

gem 'sqlite3'
gem 'pg'
gem 'taps'
$ bundle

Обновить database.yml

#development:
#  adapter: sqlite3
#  database: db/development.sqlite3
#  pool: 5
#  timeout: 5000

development:
  adapter: postgresql
  encoding: unicode
  database: f3_development
  pool: 5
  username: f3
  password:

#test:
#  adapter: sqlite3
#  database: db/test.sqlite3
#  pool: 5
#  timeout: 5000

test:
  adapter: postgresql
  encoding: unicode
  database: f3_test
  pool: 5
  username: f3
  password:

Запустить сервер кранов в базе данных sqlite

$ taps server sqlite://db/development.sqlite3 user password

Перенос данных

$ taps pull postgres://[email protected]/f3_development http://user:[email protected]:5000

Перезапустить веб-сервер Rails

$ rails s

Очистка Gemfile

#gem 'sqlite3'
gem 'pg'
#gem 'taps'
$ bundle

Ответ 3

Поскольку вы переходите к герою, вы можете использовать краны для этого:

heroku db:push

Это подтолкнет ваши локальные данные sqlite развития к производству, и heroku автоматически преобразует в postgres для вас.

Это также должно работать, чтобы подтолкнуть производственный sqlite db к герою, но он не протестирован.

RAILS_ENV=production heroku db:push

Ответ 4

вам также понадобится добавить строку " gem 'pg'" в ваш gemfile, а pg - текущий камень postgres для Rails.

Ответ 5

Просто обновите файл config/database.yml:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5

development:
  <<: *default
  database: projectname_development

test:
  <<: *default
  database: projectname_test

production:
  <<: *default
  database: projectname_production
  username: 
  password: 

Выше приведено то, что сгенерировано при запуске:

$ rails new projectname --database=postgresql --skip-test-unit

Также добавьте это в свой Gemfile:

gem 'pg'

Ответ 6

После замены gem 'sqlite3 на gem pg в gemfile я продолжал получать sqlite3 error при нажатии на мастер Heroku, потому что забыл зафиксировать обновленный gemfile. Просто следующее решение было решено:

git add .
git commit -m 'heroku push'
heroku create 
git push heroku master

Ответ 7

Просто обновите datatbase.yml

development: &development
  adapter: postgresql
  database: Your_database_name
  username: user_name
  password: password
  host:     localhost
  schema_search_path: public
  min_messages: warning

test:
  <<: *development
  database: test_database_name

production:
  <<: *development
  database: production_db_name

Мы используем рельсы, а базовые стандарты должны следовать примеру DRY, Console Configuration и т.д., поэтому в приведенном выше коде мы не повторяем тот же код снова и снова.

Ответ 8

Это было упомянуто выше меня, но у меня нет достаточной репутации, как lurker, чтобы иметь возможность продвигать его. В надежде привлечь немного больше внимания для новичков Rails, читающих этот ответ:

вам также понадобится добавить строку "gem" pg '' в ваш gemfile, "pg" - это текущий камень postgres для Rails.

^^^ Это ключевая деталь в дополнение к файлу database.yml, описанному в выбранном ответе, чтобы перенести приложение Rails на Postgres.

Ответ 9

Вот как у меня есть моя установка. Если вы используете только МРТ, а не Jruby, вы можете пропустить логику в настройках адаптера.

defaults: &defaults
  adapter: <%= RUBY_ENGINE == 'ruby' ? 'postgresql' : 'jdbcpostgresql' %>
  encoding: unicode
  pool: 5
  timeout: 5000

development:
  database: project_development
  <<: *defaults

test:
  database: project_test
  <<: *defaults

production:
  database: project_production
  <<: *defaults

Ответ 12

Сегодня у меня была такая же проблема. Я работаю над Rails 4.2.8. Решением было указать версию pg gem, в моем случае 0.18.4.

Ответ 13

Теперь стало легко с командой

bin/rails db:system:change --to=postgresql

если у вас есть какие-либо сомнения, вы можете проверить здесь

https://github.com/rails/rails/pull/34832