昨天我尝试使用这个 heroku 命令:
heroku run db:migrate
等了很久之后,它说超时了
经过多次尝试,我在 Google 上搜索了这个问题,我发现,由于其他命令也给出了相同的响应,所以问题在于我的电脑(或我的网络?)没有打开端口 5000。
我可以打开它吗?在 Ubuntu 中如何打开?
如果它与我的提供商相关,我读到过某处说我可能可以将这个端口列入白名单:我可以从 Ubuntu 执行此操作吗?怎么做?
答案1
您使用程序打开端口。操作系统为您提供了执行此操作的原语,通常在操作系统级别完成的操作是允许端口接受连接。为此,您可能需要配置防火墙甚至 SELinux,具体取决于您的安装(尽管我没有看到 Ubuntu 标准安装带有任何这些)。@ Andrea 指出,如果程序想要打开端口,您不需要对程序进行特殊许可。同样,这是一个程序,一个服务器,它将在端口上监听。任何使用面向连接的协议(例如 TCP/IP)的网络通信都需要一个监听服务器端口和连接客户端。我不知道 Heroku,但我猜从您发布的命令的外观来看,您正在尝试将数据库从一个地方迁移到另一个地方。这取决于您是否打开两个连接,一个用于从中提取数据,另一个用于写入。如果您打算从 Internet 接收连接,那么您需要一个公共 IP 上的端口,该端口到达您的服务器机器的端口 5000。如果您认为您的安装正确,请尝试以下命令:
sudo netstat -tnlp
它应该给你类似这样的输出:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 940/sshd
对于 SSH 服务器,监听端口 22 的情况就是这样。对于 5000 端口,您应该有类似的情况。如果是这样,请尝试从您的内部网络连接到服务器的 IP,然后弄清楚如何将其打开到 Internet。您可以使用 telnet 命令执行此操作:
$ telnet 192.168.1.1 22
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.8p1 Debian-7ubuntu1
^\
Connection closed by foreign host.
如果您收到“Connected”字样,则表示您的端口处于活动状态:)这是 SSH 服务器监听的示例,您的 heroku 输出应该有所不同。