由於ASP.NET開發服務器(VS2012)不允許我們通過局域網訪問URL(!!),並且我無權配置IIS,所以我我試圖使用WEBrick啓動一個靜態網站,以獲得局域網訪問。我在Windows上運行Ubuntu。Webrick或Thin運行(非紅寶石)靜態網站
在我的靜態網站的根,我創建了一個文件app.rb
,內容如下:
#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的方式或薄運行靜態(HTML/JS)的網站?
編輯
我跟斯圖爾特的建議,改變了代碼:
return [200, {"Content-Type" => "text/html"}, ["index.html"]]
現在,當我瀏覽到URL,它呈現「index.html的」爲字符串,而不是呈現文件內容。
出於同樣的原因@Annie最初的命中,我在我的回答中解釋過,你需要將'contents'包裝在一個數組中(例如'[contents]')。當我逐字回答你的回答時,我得到了:'NoMethodError:undefined method \'each'for#' –
2013-05-07 17:48:51
編輯,感謝修正@StuartM! – FilipK 2013-05-08 06:29:24
謝謝,我複製粘貼在app.rb中的代碼塊,並運行它的工作服務器!對於任何遵循相同路徑的人,如果你需要設置固定端口將此行改爲'port = 12000 +(dir.hash%1000)'到'port = your_port_number',否則它會在12XXX端口上啓動服務器可以在代碼中看到)。 – Annie 2013-05-08 06:39:55