Ho un Dockerfile
e docker-compose.yml
come nel tutorial tranne che sto iniziando con un'app esistente.Impossibile eseguire rake db: creare in Dockerfile con docker-comporre
mio docker-compose.yml
assomiglia:
db:
image: postgres
ports:
- "5432"
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3030:3030"
links:
- db
e Dockerfile
:
FROM ruby:2.1.4
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
RUN bundle install
ADD . /myapp
# RUN bundle exec rake db:create
# RUN bundle exec rake db:migrate
# RUN bundle exec rake db:seed
e database.yml
development:
adapter: postgresql
encoding: utf8
database: myapp_development
host: db
pool: 5
username: postgres
password:
Come potete vedere, ho commentato RUN bundle exec rake db:create
perché stavo ricevendo un errore:
could not translate host name "db" to address: Name or service not known
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/postgresql_adapter.rb:1222:in `initialize'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/postgresql_adapter.rb:1222:in `new'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/postgresql_adapter.rb:1222:in `connect'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/postgresql_adapter.rb:324:in `initialize'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_pool.rb:315:in `new_connection'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_pool.rb:325:in `checkout_new_connection'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_pool.rb:247:in `block (2 levels) in checkout'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_pool.rb:242:in `loop'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_pool.rb:242:in `block in checkout'
/usr/local/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_pool.rb:239:in `checkout'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_pool.rb:102:in `block in connection'
/usr/local/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_pool.rb:101:in `connection'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in `retrieve_connection'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_specification.rb:171:in `retrieve_connection'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/connection_specification.rb:145:in `connection'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/railties/databases.rake:144:in `rescue in create_database'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/railties/databases.rake:85:in `create_database'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/railties/databases.rake:62:in `block (3 levels) in <top (required)>'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/railties/databases.rake:62:in `each'
/usr/local/bundle/gems/activerecord-3.2.21/lib/active_record/railties/databases.rake:62:in `block (2 levels) in <top (required)>'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/task.rb:240:in `call'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/task.rb:240:in `block in execute'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/task.rb:235:in `each'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/task.rb:235:in `execute'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/task.rb:179:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/task.rb:172:in `invoke_with_call_chain'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/task.rb:165:in `invoke'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/application.rb:150:in `invoke_task'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/application.rb:106:in `block (2 levels) in top_level'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/application.rb:106:in `each'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/application.rb:106:in `block in top_level'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/application.rb:115:in `run_with_threads'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/application.rb:100:in `top_level'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/application.rb:78:in `block in run'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/application.rb:176:in `standard_exception_handling'
/usr/local/bundle/gems/rake-10.4.2/lib/rake/application.rb:75:in `run'
/usr/local/bundle/gems/rake-10.4.2/bin/rake:33:in `<top (required)>'
/usr/local/bundle/bin/rake:16:in `load'
/usr/local/bundle/bin/rake:16:in `<main>'
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"utf8", "database"=>"myapp_development", "host"=>"db", "pool"=>5, "username"=>"postgres", "password"=>nil}
Invece ho dovuto docker-compose build
poidocker-compose run web rake db:create
ecc
Perché non posso avere il db-creazione/migrazione nella Dockerfile. Sarebbe molto più chiaro. Posso riuscirci?
quindi qual è la soluzione? creare uno script di shell che esegua rake db: setup'? e avviare i contenitori? –
Penso che non sia necessario scrivere uno script per eseguire entrambe le operazioni perché 'rake db: setup' dovrebbe essere eseguito solo una volta.Non è necessario eseguirlo ogni volta che si avviano i contenitori. –
Quindi perché nei documenti ufficiali si dice che dobbiamo eseguire il comando 'docker-compose run web rake db: create' al riavvio dei contenitori? https://docs.docker.com/compose/rails/#restart-the-application – leymannx