无法分配请求的地址 - bind(2) (Errno::EADDRNOTAVAIL)

11

我正在使用CentOS 6.3服务器上的Rail来试用Teambox,这实际上只是在应用之前进行的试验和错误。

  • 我使用了2个虚拟盒子,运行相同版本和完全相同的CentOS,VM2只运行MySQL,将从VM1远程连接
  • 我尝试过MySQL连接#nc,它已连接
  • VM1(192.168.7.201)和VM2(192.168.7.202运行MYSQL)
  • 我在远程机器(VM2)中的my.cnf上绑定地址,绑定地址= 192.168.7.202
  • 这是我的database.yml

development:
adapter:mysql
host:192.168.7.202
port: 3306
username:teambox
password:pass
database: teambox

我试图运行#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)

请帮我解决问题

5个回答

13

试试这个

rails server -e development -b 0.0.0.0 -p 3000

0.0.0.0意味着它在本地机器上监听所有IPv4地址


2
只需要运行 rails s -b 0.0.0.0 就可以了。 - skplunkerin

2

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

0
尝试以下操作:
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


我认为以上任何一种都可以。


它只能在本地主机上运行,这样可以工作,但我想让MySQL在另一台虚拟机VM2(192.168.7.202)上运行。 - Mahardhika
rails s -E development -b 192.168.7.202 - VenkatK

0
这意味着该端口上的服务器已经在运行。
尝试。
rails server -e development -p 3001 -b 192.168.7.202

我使用默认端口3000,忘记告诉了。我正在安装这两台机器上的Ruby和Gems,这会造成问题吗? - Mahardhika
就像其他一些评论中所述,该错误是EADDRNOTAVAILABLE。如果该端口上有东西正在运行,错误将为EADDRINUSE。 - Joseph Larson

-1

错误是因为3000端口已经被占用。而且该命令正在尝试在同一端口上运行。所以更改端口并运行。还要添加-p 3002。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接