在虚拟机上托管 rails 服务器

Hosting a rails server on a virtual machine

我目前正在 Mac OS 上安装 Debian 虚拟机,其中安装了 Ruby 2.4.0。我正在使用 Virtualbox 和 Vagrant

首先,我无法以这种方式启动我的服务器 rails server 因为当我尝试在我的 Mac [=45] 上访问它时=] 网络浏览器,我有这个错误:

The localhost page isn’t working

localhost didn’t send any data.

所以,我必须这样启动它:rails server -b 0.0.0.0但是我想知道为什么我不能在 127.0.0.1(默认 IP)上启动它

此外,这是我在启动 Rails 服务器时收到的消息。

/usr/local/lib/ruby/gems/2.4.0/gems/activesupport-

5.0.1/lib/active_support/xml_mini.rb:51: warning: constant ::Fixnum is deprecated
/usr/local/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:52: warning: constant ::Bignum is deprecated
=> Booting Puma
=> Rails 5.0.1 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
/usr/local/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/core_ext/numeric/conversions.rb:138: warning: constant ::Fixnum is deprecated
Puma starting in single mode...
* Version 3.7.1 (ruby 2.4.0-p0), codename: Snowy Sagebrush
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000

虽然我知道已弃用的内容警告与我使用的 Ruby 的最新版本有关,但我不明白最后 5 行:

Puma starting in single mode...
* Version 3.7.1 (ruby 2.4.0-p0), codename: Snowy Sagebrush
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000

你能解释一下这些的意思吗?

最后但同样重要的是,当我转到 http://0.0.0.0:3000 时,即使我的显示正确(耶!你在 rails!)我在控制台上收到这条奇怪的消息。

Started GET "/" for 10.0.2.2 at 2017-02-25 23:42:38 +0000
Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by Rails::WelcomeController#index as HTML
  Parameters: {"internal"=>true}
  Rendering /usr/local/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/templates/rails/welcome/index.html.erb
  Rendered /usr/local/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/templates/rails/welcome/index.html.erb (1.6ms)
Completed 200 OK in 10ms (Views: 4.2ms | ActiveRecord: 0.0ms)

你能解释一下如何解决这个问题吗:Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255?

谢谢!

任何计算机上 localhost 界面上的应用程序 运行ning 都可以被同一台计算机上的其他应用程序 运行ning 访问。在您的情况下,MacOS(host) 和 Vagrant(guest) box 是两台不同的机器。因此,无法从主机访问绑定到 Vagrant box 上 localhost 接口的应用程序。

当您 运行 您的 rails 应用 rails s 时,rails 将绑定到界面 localhost,如下所示

ubuntu@ubuntu-xenial:~$ netstat -an |grep LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN

rails 应用程序可供 Vagrant 框中的其他应用程序访问 运行。

另一方面,如果您 运行 带有 rails s -b 0.0.0.0 的 rails 应用程序,rails 应用程序将绑定到所有接口,如下所示。

ubuntu@ubuntu-xenial:~$ netstat -an |grep LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN

运行 rails 带有 -b 0.0.0.0 的应用程序打开了从主机访问您的应用程序的权限。

但是,在能够访问 rails 应用程序之前需要做更多的事情。您的 Vagrantfile 中似乎已经有条目。但是,我还是在这里添加它。

在 Vagrantfile 中转发所需的端口,如下所示。

Vagrant.configure("2") do |config|
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "forwarded_port", guest: 3000, host: 8000
  config.vm.network "forwarded_port", guest: 3001, host: 8001
  config.vm.network "forwarded_port", guest: 3002, host: 8002
end

可以使用 http://localhost:8000 访问 Vagrant box 的端口 3000 上的 rails 应用程序 运行ning。

可以通过在 config/environments/development.rb

中添加此行来禁用 Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 消息
config.web_console.whitelisted_ips = '10.0.2.2'