You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下Rails应用切换PostgreSQL后db:migrate执行失败

解决Rails迁移时PG::ConnectionBad连接拒绝问题

从你提供的db:migrate --trace日志来看,核心错误是PostgreSQL服务器未运行,或者没有配置为接受localhost的TCP连接,导致Rails无法建立数据库连接。下面是一步步的排查和解决方法:

1. 确认PostgreSQL服务正在运行(Windows环境)

因为你的命令行路径是Windows系统,先检查服务状态:

  • 按下Win + R,输入services.msc回车打开服务管理器
  • 在列表中找到PostgreSQL相关服务(名称通常是postgresql-x64-[版本号],比如postgresql-x64-15)
  • 如果服务状态不是「正在运行」,右键点击选择「启动」;建议设置启动类型为「自动」,避免每次开机都手动启动

2. 验证PostgreSQL是否监听5432端口

打开命令提示符,执行以下命令:

netstat -ano | findstr :5432

如果没有返回任何结果,说明PostgreSQL没有监听5432端口,需要修改配置:

  • 找到PostgreSQL安装目录下的data/postgresql.conf文件(通常在C:\Program Files\PostgreSQL\[版本号]\data)
  • 找到listen_addresses配置项,修改为:
    listen_addresses = 'localhost'
    
    或者允许所有地址访问:listen_addresses = '*'
  • 确认port = 5432这一行没有被注释,端口号和Rails配置一致
  • 保存文件后,重启PostgreSQL服务

3. 检查Rails的database.yml配置正确性

确保config/database.yml中的PostgreSQL配置正确,示例如下:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: localhost
  port: 5432
  username: postgres # 默认PostgreSQL用户名是postgres
  password: your_postgres_password # 替换为你的PostgreSQL密码

development:
  <<: *default
  database: order_management_development

注意:要提前创建对应的数据库,可以用命令createdb order_management_development,或者通过pgAdmin图形工具创建。

4. 直接测试PostgreSQL连接

用psql命令直接测试连接,排除Rails配置问题:

psql -h localhost -p 5432 -U postgres

如果能成功进入PostgreSQL命令行,说明连接正常,再重新运行rails db:migrate;如果还是连接失败,回到步骤1和2检查服务和端口配置。


附:你提供的完整迁移日志

C:\Users\Jaiel\Desktop\Uebung_3_Elias_Kechter_s0555064_SoSe_2018_AI_Web_Entwicklung\order_management>rails db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
rails aborted!
PG::ConnectionBad: could not connect to server: Connection refused (0x0000274D/10061)
        Is the server running on host "localhost" (::1) and accepting
        TCP/IP connections on port 5432?
could not connect to server: Connection refused (0x0000274D/10061)
        Is the server running on host "localhost" (127.0.0.1) and accepting
        TCP/IP connections on port 5432?
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/pg-1.0.0-x86-mingw32/lib/pg.rb:56:in `initialize'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/pg-1.0.0-x86-mingw32/lib/pg.rb:56:in `new'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/pg-1.0.0-x86-mingw32/lib/pg.rb:56:in `connect'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/postgresql_adapter.rb:697:in `connect'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/postgresql_adapter.rb:221:in `initialize'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/postgresql_adapter.rb:38:in `new'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/postgresql_adapter.rb:38:in `postgresql_connection'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:759:in `new_connection'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:803:in `checkout_new_connection'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:782:in `try_to_checkout_new_connection'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:743:in `acquire_connection'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:500:in `checkout'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:374:in `connection'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `retrieve_connection'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_handling.rb:116:in `retrieve_connection'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_handling.rb:88:in `connection'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/schema_migration.rb:20:in `table_exists?'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/schema_migration.rb:24:in `create_table'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/migration.rb:1125:in `initialize'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/migration.rb:1007:in `new'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/migration.rb:1007:in `up'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/migration.rb:985:in `migrate'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/tasks/database_tasks.rb:171:in `migrate'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.1.6/lib/active_record/railties/databases.rake:58:in `block (2 levels) in <top (required)>'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.3.1/lib/rake/task.rb:271:in `block in execute'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.3.1/lib/rake/task.rb:271:in `each'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.3.1/lib/rake/task.rb:271:in `execute'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.3.1/lib/rake/task.rb:213:in `block in invoke_with_call_chain'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.3.1/lib/rake/task.rb:193:in `invoke_with_call_chain'
C:/RailsInstaller/Ruby2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.3.1/lib/rake/task.rb:182:in `invoke'
C:/RailsInstaller/Ruby2.3.3/lib/

内容的提问来源于stack exchange,提问作者Ilja KO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:51:26