【问题标题】:How do I start a simple server in Ruby/Rails?如何在 Ruby/Rails 中启动一个简单的服务器?
【发布时间】:2019-06-12 05:22:32
【问题描述】:

我的设计师最近为我提供了包含不同页面的新设计文件夹,并提到了以下内容:

您需要使用 http 服务器为 dist 文件夹提供服务。例如:python -m SimpleHTTPServer 8000 为不同的页面打开http://localhost:8000http://localhost:8000/listing.htmlhttp://localhost:8000/detail_view.html

如何使用 Rails 完成此任务?还是红宝石?

【问题讨论】:

  • 这不是一个 Rails 应用程序,它只是基本的 html。 css和js。他建议我们使用 http 服务器为文件夹提供服务,我们如何使用 ruby​​ 而不是 python 来做到这一点?按照他上面的例子。
  • 我从上面的评论中意识到您知道动态内容和静态内容之间的区别。我正在改变我的答案。也许将您的问题更改为评论中的问题并删除 Rails 标记。
  • ruby -run -e httpd . -p 8000
  • @7stud 这应该是答案 - 它的字面意思是 python -m SimpleHTTPServer 8000
  • 我同意@7stud 回答了这个问题。

标签: python ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

您可以尝试使用ruby -run -e httpd . -p 8000,它将在您的当前目录上启动一个 WEBrick 服务器。

查看此链接了解更多信息:http://sweetme.at/2013/08/28/simple-local-http-server-with-ruby/

【讨论】:

    【解决方案2】:

    一旦你创建了一个新的 Rails 应用程序:

    rails new your_app

    只需在终端中输入rails srails server。这将在 localhost:3000 上启动一个服务器。

    【讨论】:

    • 你会运行 Rails 来拥有一个静态文件服务器吗?恕我直言,这有点像用大锤打开螺丝……我并不是说它不会打开任何需要打开的东西,但这并不是完成这项工作的最佳工具。
    【解决方案3】:

    也许考虑使用 HTML、CSS 和 JavaScript 静态资产文件夹(最好称为公共)的文档根目录启动 Webrick 服务器。

    require 'webrick'
    
    server = WEBrick::HTTPServer.new(Port: 8000, DocumentRoot: "/var/www/app/public")
    server.start
    

    相当于一个班轮:

    ruby -rwebrick -e'WEBrick::HTTPServer.new(Port: 8000, DocumentRoot: "/var/www/app/public").start'
    

    这只是你的前端人员提供的 Python 代码的 Ruby 版本。

    也许只是使用 Python,老实说这并不重要。

    http://ruby-doc.org/stdlib-2.0.0/libdoc/webrick/rdoc/WEBrick.html

    http://tobyho.com/2009/09/16/http-server-in-5-lines-with/

    编辑

    在生产环境中,并发是必需的。

    Webrick 已被 Heroku 等提供商强烈推荐,因为默认情况下,它在 Rails 使用时表现为单线程。

    https://devcenter.heroku.com/articles/ruby-default-web-server

    但是 WEBrick 本身是一个多线程的网络服务器。

    https://github.com/rails/rails/issues/10772

    Is puma the ONLY multi-threaded rails 4 http server?

    【讨论】:

      【解决方案4】:

      如果我的理解正确,您想知道在使用 Ruby 时提供静态文件。

      我添加这个答案是因为作为 Ruby 标准库 (WEBrick) 一部分的内置服务器对于生产环境或负载较重(即较大的文件)来说并不是最佳的。

      一般来说,大多数生产环境对网络堆栈的使用略有不同。通常 nginx / Apache 层将处理静态文件,而 Ruby 服务器将处理动态内容。

      但是,为了让生活更轻松(以牺牲资源为代价),大多数主要的 Ruby 框架(Rails、Sinatra 等)都支持静态文件服务以及动态功能。

      您可以使用框架或查看 Rack(大多数框架使用的平台)来提供静态文件。

      另外,一些Ruby服务器,比如iodine(我是作者)支持静态文件服务...

      这是一种直接使用 Rack 的方法,可以与大多数 Ruby 服务器一起使用(例如pumaiodinethin 等)。

      这是一个简单的 Rack 应用程序,将以下内容保存在应用程序根目录下名为 config.ru 的文件中:

      # Our app will simply return a 404 not found code
      RESPONSE = [404, { 'Content-Type'.freeze => 'text/html'.freeze,
              'Content-Length'.freeze => '14'.freeze }.freeze,
       ['File Not Found'.freeze]].freeze
      # This is the application object
      app = proc do |_env|
        RESPONSE
      end
      
      # We will use the Rack static file service middleware.
      # You might want to update the folder name.
      use Rack::Static, :root => 'public'
      
      run app
      

      确保从命令行运行安装 ruby​​ 服务器 gem...您可以使用以下任何一种:

      gem install puma
      # or
      gem install iodine
      # or
      gem install thin
      

      接下来,只需从命令行运行服务器(在您的 ruby​​ 应用程序config.ru 所在的文件夹中)。即:

      puma -p 8888
      # or
      iodine -p 8888
      

      附言

      话虽如此...... nginx 或 apache 等 Web 服务器可能是完成这项工作的最佳工具。

      除此之外,您可能会使用 iodine 来处理未加密(无 SSL)的静态文件(请记住先安装):

      iodine -www ./public
      

      您不需要 Ruby 应用程序,您只需从命令行运行一个 Ruby 应用程序服务器,而不需要运行任何 Ruby 应用程序。

      【讨论】:

        猜你喜欢
        • 2017-01-23
        • 2012-08-24
        • 1970-01-01
        • 2015-10-21
        • 2017-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多