【问题标题】:serve current directory from command line从命令行提供当前目录
【发布时间】:2011-03-07 17:00:22
【问题描述】:

谁能给我一个提示,如何使用 ruby​​ 从命令行为当前目录提供服务?如果我可以有一些系统范围的配置(例如 mime-types)并简单地从每个目录启动它,那就太好了。

【问题讨论】:

    标签: ruby command-line


    【解决方案1】:

    最简单的方法(感谢Aaron Patterson/n0kada):

    ruby -run -e httpd . -p 9090
    

    另一种更复杂的方式:

    ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 9090, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start"
    

    即使是第一个命令也很难记住,所以我只在我的.bashrc 中有这个:

    function serve {
      port="${1:-3000}"
      ruby -run -e httpd . -p $port
    }
    

    它默认在端口3000上服务当前目录,但你也可以指定端口:

    ~ $ cd tmp
    ~/tmp $ serve      # ~/tmp served on port 3000
    ~/tmp $ cd ../www
    ~/www $ serve 5000   # ~/www served on port 5000
    

    【讨论】:

    • 如果你在windows上,是否可以将其作为函数添加到cmd或powershell?
    • @Daniel - 当我在我的 Mac 上运行你的一个班轮时。我收到此错误消息:未初始化的常量 INT (NameError)。你是在不同的平台上运行它吗?你知道我怎样才能避免这种情况吗?但是如果我将它写入一个文件说 myserver.rb 然后执行“ruby myserver.rb”,它工作正常。
    • @TonyJiang 我也在 Mac 上运行。用 Ruby 1.8.7、1.9.3 和 2.0.0 尝试过,它们都可以工作。很奇怪。
    • 要消除 ruby -run -e httpd . -p 9090 的迷雾,请查看 ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html。它正在执行来自un ruby​​ 标准库的 httpd 方法,因此需要 un.
    • @Deviljho 如果您在 Mac 或 Linux 上运行,只需在命令末尾添加一个 & 号即可将其发送到后台:ruby -run -e httpd . -p 9090 & 如果您想将其带回前台,使用fg
    【解决方案2】:

    作为Aaron Patterson tweeted it out 今天你可以这样做:

    ruby -run -e httpd . -p 5000
    

    您也可以通过添加-b 127.0.0.1来设置绑定地址

    适用于 Ruby 1.9.2 及更高版本。

    【讨论】:

      【解决方案3】:

      我从未见过像

      这样紧凑的东西
      python3 -m http.server
      

      您可以选择在末尾添加端口号:

      python3 -m http.server 9000
      

      https://docs.python.org/library/http.server.html

      【讨论】:

      【解决方案4】:
      require 'webrick'
      include WEBrick
      
      s = HTTPServer.new(:Port => 9090,  :DocumentRoot => Dir::pwd)
      trap("INT"){ s.shutdown }
      s.start
      

      【讨论】:

        【解决方案5】:

        使用 ruby​​ gem Serve.

        要在您的系统上安装,请运行gem install serve

        要提供目录,只需 cd 到目录并运行 serve

        默认端口是 4000。它还可以提供 ERB、HAM​​L、Slim 和 SASS 等服务。

        【讨论】:

          【解决方案6】:

          1 行中的 Web 服务器


          这可能是也可能不是你想要的,但它太酷了,我不得不分享它。

          我过去曾使用它来为文件系统提供服务。也许你可以修改它,或者只是接受它服务于一切。

          ruby -rsocket -e 's=TCPServer.new(5**5);loop{_=s.accept;_<<"HTTP/1.0 200 OK\r\n\r\n#{File.read(_.gets.split[1])rescue nil}";_.close}'
          

          我找到了here

          克里斯

          【讨论】:

            【解决方案7】:

            您可以使用sinatra gem,虽然它不会为您列出任何目录,但它会提供文件:

            require 'sinatra' # gem
            set :public_folder, '.'
            

            然后将其作为文件运行,如果在 1.8 中首先将 require 'rubygems' 添加到顶部。

            运行它之后,url就像

            http://localhost:4567/file_name

            应该解析为“./file_name”文件。

            http://localhost:4567 但是不会起作用,因为它不会“做”目录列表。请参阅 https://stackoverflow.com/a/12115019/32453 以获取解决方法。

            【讨论】:

            • 安装 sinatra gem $ gem install sinatra 然后将此文本保存到 somefile.rb 然后运行它
            • 不,我的意思是,Sinatra 给了我错误:Sinatra 不知道这个小曲。
            • @eveevans 不知何故刚刚注意到你的评论 [LOL sorry],现在更新了。
            【解决方案8】:
            python3 -m http.server
            

            或者如果您不想使用默认端口 8000

            python3 -m http.server 3333
            

            或者如果您只想允许来自本地主机的连接

            python3 -m http.server --bind 127.0.0.1
            

            请参阅docs

            【讨论】:

              猜你喜欢
              • 2014-04-16
              • 2011-08-06
              • 1970-01-01
              • 1970-01-01
              • 2021-05-28
              • 2011-05-25
              • 2011-03-13
              • 1970-01-01
              • 2021-02-17
              相关资源
              最近更新 更多