无法分配请求的地址 - bind(2) (Errno::EADDRNOTAVAIL)
Posted
技术标签:
【中文标题】无法分配请求的地址 - bind(2) (Errno::EADDRNOTAVAIL)【英文标题】:Cannot assign requested address - bind(2) (Errno::EADDRNOTAVAIL) 【发布时间】:2012-11-30 23:51:21 【问题描述】:我在 centos 6.3 服务器上使用 rail for teambox,实际上这只是在实际应用之前的反复试验。
我正在使用 2 个虚拟机,它们在相同的 centos 版本和精确副本上运行,VM2 只运行 mysql,它将远离 VM1 我试过mysql连接#nc,它已经连接了 VM1 (192.168.7.201) & VM2 (192.168.7.202 运行 MYSQL) 我在 my.cnf 中的远程计算机 (VM2) 上有绑定地址,绑定地址=192.168.7.202 这是我的 database.yml开发:适配器:mysql主机:192.168.7.202端口: 3306 用户名:teambox 密码:pass 数据库: 团队框
我正在尝试使用#rails server -e development -b 192.168.7.202
并给出这个错误
Exiting
/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/tcphack.rb:12:in `initialize_without_backlog': Cannot assign requested address - bind(2) (Errno::EADDRNOTAVAIL)
请帮帮我
【问题讨论】:
【参考方案1】:这意味着服务器已经在该端口上运行
试试
rails server -e development -p 3001 -b 192.168.7.202
【讨论】:
我将默认端口保留为 3000,忘记联系电话,我正在用 ruby 和 gems 安装这两台机器,这是否也会造成问题? 与其他一些 cmets 一样,错误是 EADDRNOTAVAILABLE。如果该端口上正在运行某些东西,则错误将是 EADDRINUSE。【参考方案2】:尝试如下:
development:
adapter: mysql
host: 127.0.0.1
port: 3306
username: teambox
password: pass
database: teambox
(或)
development:
adapter: mysql
host: localhost
port: 3306
username: teambox
password: pass
database: teambox
我认为以上任何一种方法都可以。
【讨论】:
它只能在 localhost 上运行,但我希望 mysql 在单独的机器上运行,即 VM2 (192.168.7.202) rails s -E development -b 192.168.7.202【参考方案3】:出现错误是因为 3000 端口已在使用中。并且该命令正在尝试在同一端口中运行。所以改变端口并运行。添加这个也 -p 3002
【讨论】:
【参考方案4】:Rails 5.0.0.1 服务器在没有 IPv6 的情况下无法工作。
您需要从/etc/sysctl.conf
文件启用IPv6(默认启用IPv6)。
如果有的话,删除或评论这些行。
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
重启服务器以启用 IPv6。试试:
rails server
【讨论】:
【参考方案5】:试试这个
rails server -e development -b 0.0.0.0 -p 3000
0.0.0.0 表示它监听本地机器上的所有 IPv4 地址
【讨论】:
只是rails s -b 0.0.0.0
为我做的。以上是关于无法分配请求的地址 - bind(2) (Errno::EADDRNOTAVAIL)的主要内容,如果未能解决你的问题,请参考以下文章
针对 localhost 相对 url 的请求“无法分配请求的地址”
System.Net.Http.HttpRequestException:无法分配请求的地址 - 本地主机中的 2 个 .net 核心 Web 应用程序之间通信时出错