Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

443
Views
Mejores prácticas para Rails docker-compose db:create db:migrate

Tengo una aplicación de rieles simple con el archivo docker-compose.yml . Consta de dos contenedores: contenedor db con PostgreSQL y contenedor web con aplicación Rails.

En dockerfile para elemento web tengo esas líneas en CMD

 CMD RAILS_ENV=production rake db:create db:migrate && \ bundle exec rails s -p 3000 -b '0.0.0.0' --environment=production

Entonces, en la línea rake db:create db:migrate, creo db si es una primera ejecución del contenedor db y ejecuto la migración.

Pero si solo se trata de una actualización del elemento web, solo necesito ejecutar db:migrate y db:create (como debería) me da un error

 ERROR: database "myapp_production" already exists STATEMENT: CREATE DATABASE "myapp_production" ENCODING = 'unicode'

Todo funciona bien, pero creo que hay una mejor manera.
¿Cuál es la mejor manera de manejar esta situación?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Tengo la misma pila de desarrollo y esto es lo que estoy haciendo.

Aquí hay un Dockerfile para postgres que estoy extendiendo:

 FROM postgres:9.4 ADD db/init.sql /docker-entrypoint-initdb.d/ EXPOSE 5432 CMD ["postgres"]

De la docker postgres documentación:

Si desea realizar una inicialización adicional en una imagen derivada de esta, agregue uno o más scripts *.sql o *.sh en /docker-entrypoint-initdb.d (creando el directorio si es necesario). Después de que el punto de entrada llame a initdb para crear el usuario y la base de datos de postgres predeterminados, ejecutará cualquier archivo *.sql y generará cualquier script *.sh que se encuentre en ese directorio para realizar una inicialización adicional antes de iniciar el servicio.

Mi init.sql :

 CREATE USER database_user; CREATE DATABASE database_production; GRANT ALL PRIVILEGES ON DATABASE database_production TO database_user;

Después de eso, mi comando RUN en el contenedor web apunta al script run.sh :

 #!/usr/bin/env bash echo "Bundling gems" bundle install --jobs 8 --retry 3 echo "Clearing logs" bin/rake log:clear echo "Run migrations" bundle exec rake db:migrate echo "Seed database" bundle exec rake db:seed echo "Removing contents of tmp dirs" bin/rake tmp:clear echo "Starting app server ..." bundle exec rails s -p 3000 -b '0.0.0.0'

Eso es todo. Mi base de datos creada en el contenedor db , y la aplicación web solo realiza la migración.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!