2

ASP.NET 開発サーバー (VS2012) では LAN 経由で URL にアクセスできず (!!)、IIS を構成する権限がないため、WEBrick を使用して静的 Web サイトを起動し、LAN アクセスを取得しようとしています。 . Windowsでvagrantを使用してUbuntuを実行しています。

app.rb静的 Web サイトのルートに、次の内容のファイルを作成しました。

#app.rb

require 'rubygems'
require 'rack'

class App
  def call(env)
    return [200, {"Content-Type" => "text/html"}, "index.html"]
  end
end

Rack::Handler::WEBrick.run(App.new, :Port => 8080)

サーバーを実行すると; ruby app.rbを参照してhttp://localhost:8080、次のエラーが表示されます。

ERROR NoMethodError: undefined method `each' for "index.html":String
    /usr/local/rvm/gems/ruby-1.9.3-p392/gems/rack-1.4.5/lib/rack/handler/webrick.rb:71:in `service'
    /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
    /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
    /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'

WEBrick または Thin を使用して静的 (HTML / JS) Web サイトを実行する方法はありますか?

編集

Stuart の提案に従い、コードを次のように変更しました。

return [200, {"Content-Type" => "text/html"}, ["index.html"]]

現在、URL を参照しているときに、ファイル コンテンツをレンダリングする代わりに、"index.html" を文字列としてレンダリングします。

4

2 に答える 2

2

WEBrick を使用して、HTTP 経由でフォルダーを提供する簡単な方法があります。

また、Rack 自体はファイルの提供を処理しません。HTTP 経由で提供するファイルを読み取り、Rack にファイルの内容を渡す必要があります。そのためには、次の簡単な解決策を試すことができます。

def call(env)
  contents = File.open("index.html") { |f| f.read }
  return [200, {"Content-Type" => "text/html"}, [contents]]
end
于 2013-05-07T10:25:22.350 に答える