最近在用docker跑rails,也遇到了一些坑,這里記錄一下。
首先build項目:
docker-compose build
然后就開始報錯了:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
這里報錯是說找不到 /var/run/postgresql/.s.PGSQL.5432 文件,但我本地運行是沒問題的。於是去找docker從入門到實踐這本書的docker rails 例子, 地址在這里:發現我的database.yml
文件不對。我的是這樣的:
default: &default adapter: postgresql encoding: unicode`請輸入代碼` # For details on connection pooling,www.97yingyuan.org see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
Rails 默認讀取的數據庫目標是 localhost ,我們需要手動指定容器的 db 。同樣的,還需要把用戶名修改成和 postgres 鏡像預定的一致。 打開最新生成的 database.yml 文件。用以下內容替換:
default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: postgres host: db
這樣再運行docker-compose build
,成功build! 然后再跑起來docker-compose up
,悲劇的又報錯了:
ActiveRecord::NoDatabaseError (FATAL: database "heroku_app_development" does not exist
提示沒有創建heroku_app_development
數據庫,OK,那就創建一個:
sudo docker ps
#列出所有容器sudo docker exec -it [container ID] /bin/bash
#進入postgressudo su - postgres
#切換到postgres用戶,因為這個用戶有createdb權限ceratedb heroku_app_development
#heroku_app_development 創建完成!
再運行docker-compose up
,又報錯:
Migrations are pending. To resolve this issue, run:
bin/rails db:migrate RAILS_ENV=development
railser應該很熟悉,數據庫遷移,進入web容器:sudo docker exec -it [container ID] /bin/bash
#進入web容器rails db:migrate
#遷移成功!