簡體   English   中英

PG :: ConnectionBad:無法連接到服務器:連接被拒絕(Ubuntu 16.04,Rails 5,Capistrano)

[英]PG::ConnectionBad: could not connect to server: Connection refused (Ubuntu 16.04, Rails 5, Capistrano)

將Rails 5應用程序部署到Ubunbtu 16.04.3(Digitalocean VPS)時,在運行cap production deploy --trace ,出現以下錯誤:

終奌站

$HOME/.rbenv/bin/rbenv exec bundle exec rake db:migrate
rake aborted!

PG::ConnectionBad: could not connect to server: Connection refused
  Is the server running on host "138.68.6.26" and accepting
  TCP/IP connections on port 5432?

/home/deploy/my-app/shared/bundle/ruby/2.4.0/gems/pg-0.21.0/lib/pg.rb:56:in `initialize'
/home/deploy/my-app/shared/bundle/ruby/2.4.0/gems/pg-0.21.0/lib/pg.rb:56:in `new'
/home/deploy/my-app/shared/bundle/ruby/2.4.0/gems/pg-0.21.0/lib/pg.rb:56:in `connect'
/home/deploy/my-app/shared/bundle/ruby/2.4.0/gems/activerecord-5.1.4/lib/active_record/connection_adapters/postgresql_adapter.rb:695:in...
/home/deploy/my-app/shared/bundle/ruby/2.4.0/gems/activerecord-5.1.4/lib/active_record/connection_adapters/postgresql_adapter.rb:220:in…
/home/deploy/my-app/shared/bundle/ruby/2.4.0/gems/activerecord-5.1.4/lib/active_record/connection_adapters/postgresql_adapter.rb:38:in …
/home/deploy/my-app/shared/bundle/ruby/2.4.0/gems/activerecord-
...
/home/deploy/.rbenv/versions/2.4.1/bin/bundle:22:in `load'
/home/deploy/.rbenv/versions/2.4.1/bin/bundle:22:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
cap aborted!

寶石文件

group :development do
  gem 'capistrano', '~> 3.7', '>= 3.7.1'
  gem 'capistrano-rails', '~> 1.2'
  gem 'capistrano-passenger', '~> 0.2.0'
  gem 'capistrano-rbenv', '~> 2.1'
  gem 'capistrano-bundler'
end

Capfile

require 'capistrano/rbenv'
set :rbenv_type, :user
set :rbenv_ruby, '2.4.1'

require 'capistrano/bundler'
require 'capistrano/rails'
require 'capistrano/passenger'

config / deploy.rb

set :application, "my-app"
set :repo_url, "git@github.com:username/my-app.git"

set :deploy_to, '/home/deploy/my-app'

append :linked_files, "config/database.yml", "config/secrets.yml"
append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "vendor/bundle", "public/system", "public/uploads"

config / deploy / production.rb

server '138.68.6.26', user: 'deploy', roles: %w{app db web}

在服務器上,我已經制作了/home/deploy/my-app/shared/config/database.yml鏈接文件/home/deploy/my-app/shared/config/database.yml/home/deploy/my-app/shared/config/secrets.yml ,並將它們從我的服務器中刪除回購。 我也git也忽略了它們。

數據庫

production:
  adapter: postgresql
  host: 138.68.6.26
  database: my-app
  username: deploy
  password: password
  encoding: unicode
  pool: 5

secrets.yml

production:
  secret_key_base: 9b865db3b261f66576ef6b2a...

我還設置了一個名為postgres的Ubuntu系統用戶,並創建了一個名為deploy的數據庫用戶。 我按照database.yml文件中的指示正確命名了數據庫。 我到處搜尋了一個無法工作的地方。 大多數答案是用於本地調試。 這是用於部署。

嘗試通過psql連接到該服務器,如果不能,問題出在您的postgresql服務器配置中。 (通過應用的服務器執行此操作)

psql -h 138.68.6.26 -U部署my-app

您的Postgres服務器配置為僅在localhost接口上偵聽,因此無法從外部使用。

要將Postgres配置為允許外部TCP連接,請進行以下更改:

1)在/etc/postgresql/<>/main/postgresql.conf中將listen_addresses設置為*

2)在/etc/postgresql/<>/main/pg_hba.conf中設置訪問權限,以允許來自外部IP的TCP連接

只需確保設置了類似UFW的防火牆即可防止任意主機連接到數據庫。

事實證明,我在database.yml文件中有錯誤的IP地址。 我本應將其設置為本地ip(127.0.0.1)時將其設置為我的主機ip(138.68.6.26)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM