コマンドラインから現在のディレクトリを提供する


94

誰かがルビーを使用してコマンドラインから現在のディレクトリを提供する方法、ヒントを教えてもらえますか?システム全体の構成(例:mime-types)があり、すべてのディレクトリから起動できるのであれば、それは素晴らしいことです。

回答:


203

最も簡単な方法(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に追加できますか?
カレブ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
明確にするために、ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.htmlをruby -run -e httpd . -p 9090参照してくださいunRuby標準ライブラリからhttpdメソッドを実行しているため、unが必要です。
Gee-Bee

1
@Deviljho MacまたはLinuxで実行している場合は、コマンドの最後にアンパサンドを追加してバックグラウンドに送信しruby -run -e httpd . -p 9090 & ますfg。フォアグラウンドに戻す場合は、を使用します。
Daniel Perez Alvarez




4

ruby gem Serveを使用します。

システムにインストールするには、を実行しますgem install serve

ディレクトリを提供するには、ディレクトリにcdしてを実行しserveます。

デフォルトのポートは4000です。これは、ERB、HAM​​L、Slim、SASSなどにも使用できます。


3

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

ここで見つけ

クリス


3

あなたはsinatragem を使用することができますが、それはあなたのためのディレクトリリストをしませんが、それはファイルを提供します:

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に保存して実行します
rogerdpack

いいえ、つまり、シナトラは私にエラーを与えます:シナトラはこの問題を知りません。
eveevans 2012

@eveevansがなんとかしてあなたのコメントに気付いた[LOL申し訳ありません]、今更新されました。
rogerdpack 2016

1
python3 -m http.server

またはデフォルトのポート8000​​を使用したくない場合

python3 -m http.server 3333

または、ローカルホストからの接続のみを許可する場合

python3 -m http.server --bind 127.0.0.1

docsを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.