ruby-on-rails - new - ruby and rails documentation
Cambio de SQLite a PostgreSQL en un nuevo proyecto de Rails (11)
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
Tengo una aplicación de rieles 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?
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
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
Los siguientes pasos me funcionaron. Utiliza la gema 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 gema 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
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
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
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 gema 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.
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''
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.
Una posible solución (no para heroku) es usar yaml.db de:
también necesitarás agregar la línea " gem ''pg'' " a tu gemfile, ''pg'' es la gema actual de postgres para Rails.