데이터베이스가 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