Cambio de SQLite a PostgreSQL en un nuevo proyecto de Rails

Tengo una aplicación de Rails cuyas bases de datos están en SQLite (El desarrollador y la producción). Como me estoy mudando a heroku, quiero convertir mi base de datos a PostgreSQL.

De todos modos, escuché que la base de datos de desarrollo local no necesita ser cambiada de SQLite, así que no necesito cambiar eso, sin embargo, ¿cómo hago para cambiar el entorno de producción de SQLite a PostgreSQL?

¿Alguien ha hecho esto antes y puede ayudar?

PD. No estoy seguro de cómo se llama exactamente este proceso, pero he oído hablar de migrar la base de datos de SQLite a PostgreSQL, ¿eso es lo que hay que hacer?

Puede cambiar su database.yml a este en lugar de usar el sqlite one de fábrica:

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 

Los siguientes pasos me funcionaron. Utiliza la gem de grifos , creada por Heroku y mencionada en Railscast # 342 de Ryan Bates. Hay algunos pasos, pero funcionó perfectamente (incluso las fechas se migraron correctamente), y fue mucho más fácil que el Oracle -> DB2 o SQL Server -> migraciones de Oracle que he hecho en el pasado.

Tenga en cuenta que SQLite no tiene un id. De usuario o contraseña, pero la gem de grifos requiere algo. Acabo de usar los literales “usuario” y “contraseña”.

Crear el usuario de la base de datos Postgres para las nuevas bases de datos

 $ 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 

EDITAR – Comando actualizado a continuación – use esto en su lugar

 $ createuser f3 -d -s 

Crea las bases de datos requeridas

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

Actualiza el Gemfile

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

Actualizar 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: 

Inicie el servidor de tomas en la base de datos sqlite

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

Migra los datos

 $ taps pull postgres://f3@localhost/f3_development http://user:password@localhost:5000 

Reinicie el servidor web Rails

 $ rails s 

Limpiar el Gemfile

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

Como te estás moviendo a heroku, puedes usar los toques para hacer esto:

 heroku db:push 

Esto impulsará los datos locales de desarrollo de sqlite a la producción, y heroku se convertirá automágicamente en postgres para usted.

Esto también debería funcionar para impulsar una producción sqlite db a heroku, pero no está probado.

 RAILS_ENV=production heroku db:push 

también necesitarás agregar la línea ” gem ‘pg’ ” a tu gemfile, ‘pg’ es la gem actual de postgres para Rails.

Simplemente actualice el archivo 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: 

Lo anterior es lo que se genera cuando ejecutas:

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

También agregue esto a su Gemfile:

 gem 'pg' 

Después de reemplazar gem 'sqlite3 con gem pg en el gemfile, seguí recibiendo el sqlite3 error al presionar a Heroku master porque olvidé confirmar el gemfile actualizado. Simplemente haciendo lo siguiente, resuelve esto:

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

Simplemente actualiza tu 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 

Estamos utilizando raíles y los estándares básicos deben seguir como DRY, Convención sobre Configuración, etc. por lo que en el código anterior no estamos repitiendo el mismo código una y otra vez.

Se ha mencionado antes que yo, pero no tengo la reputación suficiente como para acecharlo. Con la esperanza de atraer un poco más de atención para los novatos de Rails al leer esta respuesta:

también necesitarás agregar la línea “gem ‘pg'” a tu gemfile, ‘pg’ es la gem actual de postgres para Rails.

^^^ Esta es una pieza clave además del archivo database.yml descrito en la respuesta seleccionada para migrar su aplicación Rails a Postgres.

Así es como tengo la configuración de la mina. Si solo está utilizando MRI y no Jruby, puede omitir la lógica en la configuración del adaptador.

 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 

Puede intentar lo siguiente: sqlite3 development.db .dump | psql dbname username sqlite3 development.db .dump | psql dbname username

o prueba con sqlitetopgscript: http://trac-hacks.org/browser/sqlitetopgscript/0.10/sqlite2pg

Una posible solución (no para heroku) es usar yaml.db de:

http://www.railslodge.com/plugins/830-yaml-db