명령 줄에서 현재 디렉토리 제공


94

누군가 나에게 힌트를 줄 수 있습니까? 루비로 명령 줄에서 현재 디렉토리를 제공하는 방법? 시스템 전체 구성 (예 : MIME 유형)을 갖고 모든 디렉토리에서 간단히 실행할 수 있다면 좋을 것입니다.

답변:


204

가능한 가장 간단한 방법 ( 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에 함수로 추가 할 수 있습니까?
Caleb 2013

@Daniel-Mac에서 하나의 라이너를 실행할 때. 이 오류 메시지가 나타납니다. 초기화되지 않은 상수 INT (NameError). 다른 플랫폼에서 실행하고 있습니까? 이것을 어떻게 피할 수 있는지 아십니까? 그러나 파일에 myserver.rb라고 쓴 다음 "ruby myserver.rb"를 실행하면 제대로 작동합니다.
Tony Jiang

@TonyJiang 저는 Mac에서도 실행 중입니다. Ruby 1.8.7, 1.9.3 및 2.0.0으로 시도해 보았고 모두 작동합니다. 기묘한.
Daniel Perez Alvarez

7
demistify하려면 ruby -run -e httpd . -p 9090ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html을 . un루비 표준 라이브러리 에서 httpd 메소드를 실행 하고 있으므로 un이 필요합니다.
Gee-Bee

1
@Deviljho Mac 또는 Linux에서 실행중인 경우 명령 끝에 앰퍼샌드를 추가하여 백그라운드로 보냅니다 . ruby -run -e httpd . -p 9090 & 전경으로 다시 가져 오려면 fg.
Daniel Perez Alvarez 2015



5
require 'webrick'
include WEBrick

s = HTTPServer.new(:Port => 9090,  :DocumentRoot => Dir::pwd)
trap("INT"){ s.shutdown }
s.start

4

Ruby gem Serve를 사용하세요 .

시스템에 설치하려면을 실행하십시오 gem install serve.

디렉토리를 제공하려면 디렉토리로 이동하여 serve.

기본 포트는 4000입니다. 또한 ERB, HAML, Slim 및 SASS와 같은 서비스를 제공 할 수 있습니다.


3

한 줄의 웹 서버


이것은 당신이 원하는 것일 수도 있고 아닐 수도 있지만 너무 멋져서 공유해야했습니다.

나는 과거에 파일 시스템을 제공하기 위해 이것을 사용했습니다. 아마도 당신은 그것을 수정하거나 그것이 모든 것을 제공한다는 것을 받아 들일 수 있습니다.

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}'

여기 에서 찾았습니다

크리스


3

sinatragem을 사용할 수 있지만 디렉토리 목록을 작성하지는 않지만 파일을 제공합니다.

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

그런 다음 1.8에서 먼저 'rubygems'가 필요하면 파일로 실행하십시오.

실행 후 URL은 다음과 같습니다.

http : // localhost : 4567 / file_name

"./file_name"파일로 확인되어야합니다.

그러나 http : // localhost : 4567 은 디렉토리 목록을 "실행"하지 않기 때문에 작동하지 않습니다. 해결 방법 은 https://stackoverflow.com/a/12115019/32453 을 참조 하십시오 .


시나 보석 $ 보석은 다음 somefile.rb 실행이 텍스트 저장 후시나 설치 설치
rogerdpack

아니, 내 말은, Sinatra는 나에게 오류를 준다 : Sinatra는이 바보를 모른다.
eveevans

@eveevans가 방금 귀하의 의견 [LOL 죄송합니다]을 발견했습니다. 지금 업데이트되었습니다.
rogerdpack

1
python3 -m http.server

또는 기본 포트 8000을 사용하지 않으려면

python3 -m http.server 3333

또는 localhost에서만 연결을 허용하려는 경우

python3 -m http.server --bind 127.0.0.1

문서를 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.