如何在rails上绑定ruby的外部主机?

时间:2016-03-28 08:17:45

标签: ruby-on-rails ruby ruby-on-rails-4 ember.js web-deployment

我在另一个虚拟实例上的rails项目上部署了我的ruby,并通过将此代码附加到/config/boot.rb将绑定IP更改为外部浮动IP:

require 'rails/commands/server'
module Rails
  class Server
    def default_options
      super.merge(Host:  '199.116.235.154', Port: 3000)
    end
  end
end

也可以在this answer中找到它。但是,当我通过rails s启动服务器时,出现了此错误:

> /home/ubuntu/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/puma-3.2.0/lib/puma/binder.rb:240:in
> `initialize': Cannot assign requested address - bind(2) for
> "199.116.235.154" port 3000

我知道这是因为199.116.235.154是外部主持人,所以puma不会授予我访问权限。当我将其更改为内部IP:10.2.3.52时,它会运行,但我无法通过手机浏览器或其他计算机定位10.2.3.52。 那么,有什么方法让我公开199.116.235.154知识产权对我有用吗?

另外,我的前端由ember构建在不同的目录中。他们通过jsonAPI与每一端进行通信,目前我正在使用localhost进行调试:

import DS from 'ember-data';

export default DS.JSONAPIAdapter.extend({
  // Connect to Rails server
  host: 'http://localhost:3000',
});

如果我可以在rails后端为我的ruby制作199.116.235.154主机,它是否也可以通过将localhost更改为199.115.235.154来为我的余前端工作?

2 个答案:

答案 0 :(得分:0)

请考虑使用代理。它很容易在Nginx上设置:

只需安装nginx并找到它的配置文件(通常它位于/etc/nginx/nginx.conf) 并添加以下块:

 server {
   ...
    location / {
      proxy_pass http://127.0.0.1:3000;
    }
   ...

然后您可以通过http://public-ip/访问您的后端rails应用,假设您的nginx正常运行80端口。

答案 1 :(得分:0)

  1. 在导轨中预编译您的余烬资源:ember-cli-rails
  2. 在heroku docker中部署您的应用:Deploy rails app in heroku docker
  3. docker的好处是,当您在构建/运行docker机器时遇到错误时,它会在控制台中为您提供非常清晰和准确的解决方案。