簡體   English   中英

為什么 Ruby on Rails 使用 http://0.0.0.0:3000 而不是 http://localhost:3000?

[英]Why does Ruby on Rails use http://0.0.0.0:3000 instead of http://localhost:3000?

當我嘗試按照官方“入門”Ruby on Rails 教程進行操作時,很快就出錯了。 基本上它說:

…導航到 http://localhost:3000。 您應該看到 Rails 的默認信息頁面。

但是當我按照說明進行操作時,我得到了

=> Rails 2.3.4 application starting on http://0.0.0.0:3000

在嘗試了這兩個地址之后,我知道它們指向同一個東西,但是有人可以向我解釋為什么 Rails 上的 Ruby 使用http://0.0.0.0:3000而不是http://localhost:3000 :700D9A 嗎?

有沒有辦法讓 WEBrick 服務器始終使用 localhost?

Localhost 的字面意思是“您的本地主機”,通常由 127.0.0.1 標識,所有到該地址的流量都通過環回接口路由。 如果您的 Web 服務器正在偵聽 127.0.0.1 上的連接,這意味着它只接受來自同一主機的請求。

0.0.0.0 意味着 Rails 正在偵聽所有接口,而不僅僅是環回接口。

0.0.0.0表示所有接口。 包括127.0.0.1又名localhost

眾所周知,如果我訪問http://localhost:3000/ ,我的 firefox 瀏覽器會正確顯示本地托管服務器,但當我嘗試訪問http://0.0.0.0:3000/時,它不會按照 Ruby 的建議顯示。 顯然,在某種意義上,它們並不等價。

順便說一句,我在 Windows 上。

如果你想要localhost ,一種快速的方法是指定綁定rails s -blocalhost (以及帶有-pNNNN的端口,帶有rails s --help更多選項)。

由於需要調查的原因,我的服務器默認開始在localhost上運行。 結果lvh.me停止工作,阻止我指定子域(例如: www.lvh.me:3000 )。

我“解決”了這個指定綁定:

rails s -b0.0.0.0 # will work with lvh.me

Rails 4.1 警告消息。

僅供參考,在 Rails 4.1 上,您將在啟動時收到一條警告消息,如下所示:

=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)

這表明不推薦綁定到0.0.0.0 ,而應該使用127.0.0.1

在 Rails 4.2+ 中,Rails 服務器默認綁定是到localhost而不是0.0.0.0甚至127.0.0.1

實際上,rails 有不同的配置選項,關於它是偵聽特定接口還是所有接口。

對於我們這些使用 Nitrous.io 虛擬服務器環境進行開發的人,我相信我們必須綁定到 0.0.0.0,因為本身沒有 localhost。

重新啟動操作系統對我有用。 (在 Mac v 10.12 上)

使用這個:rails server -u webrick

暫無
暫無

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

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