[ruby-on-rails] 새로운 Rails 프로젝트에서 SQLite에서 PostgreSQL로 변경

데이터베이스가 SQLite (개발자 및 프로덕션) 인 Rails 앱이 있습니다. heroku로 이동하고 있으므로 데이터베이스를 PostgreSQL로 변환하고 싶습니다.

어쨌든 로컬, 개발 및 데이터베이스를 SQLite에서 변경할 필요가 없다고 들었습니다. 따라서 변경할 필요는 없지만 프로덕션 환경을 SQLite에서 PostgreSQL로 변경하는 방법은 무엇입니까?

아무도 전에 이것을 해본 적이 있고 도울 수 있습니까?

추신 :이 프로세스가 정확히 무엇인지 확실하지 않지만 SQLite에서 PostgreSQL로 데이터베이스를 마이그레이션하는 것에 대해 들었습니다. 무엇을해야합니까?



답변

즉시 사용 가능한 sqlite를 사용하는 대신 database.yml을 이것으로 변경할 수 있습니다.

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


답변

아래 단계는 나를 위해 일했습니다. Heroku가 제작하고 Ryan Bates의 Railscast # 342에서 언급 한 보석을 사용합니다 . 몇 가지 단계가 있지만 완벽하게 작동했으며 (날짜가 올바르게 마이그레이션 되었음) 과거에 수행 한 Oracle-> DB2 또는 SQL Server-> Oracle 마이그레이션보다 훨씬 쉽습니다.

SQLite에는 사용자 ID 또는 비밀번호가 없지만 탭 보석에는 무언가가 필요합니다. 방금 문자 “user”와 “password”를 사용했습니다.

새 데이터베이스에 대한 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

편집-아래의 업데이트 된 명령-대신 사용하십시오

$ 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://f3@localhost/f3_development http://user:password@localhost:5000

Rails 웹 서버를 다시 시작하십시오

$ rails s

젬 파일 정리

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


답변

heroku로 이동 중이므로 탭을 사용하여 다음을 수행 할 수 있습니다.

heroku db:push

이를 통해 로컬 개발 sqlite 데이터를 프로덕션으로 푸시하고 heroku는 자동으로 postgres로 변환합니다.

이것은 생산 sqlite db를 heroku로 푸시하기 위해 작동하지만 테스트되지 않았습니다.

RAILS_ENV=production heroku db:push


답변

Rails의 현재 postgres gem 인 ‘pg’ 줄을 gem 파일 에 추가해야합니다 .


답변

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'


답변

이제 단일 명령으로 쉬워졌습니다

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


답변

gemfile에서 gem 'sqlite3을 gem pg으로 교체 한 후 sqlite3 error업데이트 된 gemfile을 커밋하는 것을 잊었 기 때문에 Heroku 마스터로 푸시 할 때 계속 사용 했습니다. 간단히 다음을 수행하면이 문제가 해결되었습니다.

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