使Ruby on Rails应用程序在网络中可用

时间:2014-08-04 07:16:16

标签: ruby-on-rails ruby postgresql

所以我有一个在Ruby on Rails 4.0上开发的Web应用程序,可以在我的本地PC上通过localhost:3000访问(在我通过在应用程序根目录的cmd中运行rails s启动rails服务器之后)。它具有中等复杂性,具有数据库交互(我使用PostgreSQL)等。

现在,除非我能在网络级别上运行,否则应用程序的实用程序为零。我需要网络中的任何用户(最初所有用户,然后我将限制只有少数用户的可见性 - 我知道该怎么做)才能通过使用我的IP访问我的应用程序(类似{{1或者,最好是友好名称,例如:1.1.34.45/index

我想这可以通过做一些快速调整来完成,但是需要你的指导方针来改变如何以及改变什么,这样所有网络用户都可以像我在PC上那样访问本地PC上的应用程序。 非常感谢提前

3 个答案:

答案 0 :(得分:2)

如果应用程序在localhost:3000处可用,则应通过1.1.34.45:3000提供。假设您的本地PC上已打开端口3000,而1.1.34.45是您当地网络中的当前IP地址。

请注意,Webbrick服务器并不是您想要在生产中使用的东西。但是对于测试,可以将该应用程序打开到本地网络。

答案 1 :(得分:0)

也许你会找到有用的代理本地宝石。

“ProxyLocal可以代理您的本地网络服务器并通过互联网公开发布。”

Official site

答案 2 :(得分:0)

要使开发应用程序可用于防火墙的商业环境,请考虑使用heroku工具,尤其是“foreman”。你可以配置工头使用更快的网络服务器(独角兽是一个不错的选择,IMO),在3000或500或其他任何地方运行......但是工头需要保持运行,直到你杀了它。被杀时,您不提供任何服务。并且......运行时,它使用Rails“开发”模式。在开发模式中你可能会做的事情,你不会做生产 - 例如可选地使用gem“better_errors”,这可能有助于您追踪和修复问题,但也意味着您的任何用户群也可以深入挖掘代码,在低级别更改数据库等 - 如果它们触发错误。如果您正确管理Gemfile,那么生产模式将无法访问开发人员工具。

就个人而言,我通过在源代码仓库中创建“临时”分支,使其他用户可以使用应用程序的测试版本。然后,我在配置为生产用途的服务器上的该临时分支中运行代码,但是使用分段分支而不是主分支。这样,我可以在不影响实时服务器或共享潜在风险开发服务的情况下,向感兴趣的用户演示应用程序更改。

最基本的步骤?请注意,以下命令中单引号和双引号之间存在有意义的差异。如果在Procfile行上使用双引号,则将在端口3000处启动固定服务器。使用单引号,您可以设置环境参数以配置它所在的端口 - 在尝试使用相同的配置过程时很有用在开发,分期和生产。

安装heroku toolbelt

将“gem'unicorn'”添加到您的Gemfile:

echo "" >> Gemfile
echo "gem 'unicorn'" >> Gemfile

为领班设置Procfile:

echo 'web: unicorn -c config/unicorn.rb -p ${PORT:=3000}' > Procfile

设置unicorn配置文件:

cat > config.unicorn.rb << HERE
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true
before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end
HERE

然后运行foreman start以在端口3000上获得线程化的高性能开发Web服务器。

准备好后,建立一个临时分支,并设置一个更完整的临时服务器。

但真正的问题是......为什么不在像Heroku这样的服务上运行呢?如果您有任何类型的用户注册/登录过程,则可以控制访问权限。并且heroku将兴高采烈地为您提供开发,分段和生产服务器。将数据保持在10MB(IIRC)以下,您可以免费使用它。数据(可能符合法规要求)是否必须留在本地网络的防火墙内?