概要
開発などでは大抵の場合 Rails や Sinatra などのフレームワークを使います
ただベースになっている技術は Ruby に標準で実装されている Webrick を使っている場合がほとんどです
今回は Webrick の学習も含めて Webrick だけを使ってサーバを構築してみました
環境
- macOS 10.15.6
- Ruby 2.7.1p83
とりあえずサーバを立ててみる
まずはサーバを立ててみましょう
単純な Web サーバでカレントにあるファイルを配信するだけですが以下でサーバが作れます
vim app.rb
require 'webrick'
srv = WEBrick::HTTPServer.new({
:DocumentRoot => './',
:BindAddress => '127.0.0.1',
:Port => 20080
})
trap("INT"){ srv.shutdown }
srv.start
ruby app.rb
trap("INT"){ srv.shutdown }
をしないと Ctrl+c で停止できないので記載しましょう
これで localhost:20080
にアクセスすれば以下のようにファイルインデックスが確認できます
Index files を見せない
公開するサーバはセキュリティ的にもファイルインデックスをオフにする場合が多いです
Webrick の場合は以下のようにします
vim app.rb
require 'webrick'
srv = WEBrick::HTTPServer.new({
:DocumentRoot => './',
:BindAddress => '127.0.0.1',
:Port => 20080
})
srv.mount('/', WEBrick::HTTPServlet::FileHandler, Dir.pwd, { :FancyIndexing => false })
trap("INT"){ srv.shutdown }
srv.start
これで 403 が表示されるようになります
cgi を使う
CGI を使って ruby のスクリプトの結果を返すこともできます
WEBrick::HTTPServlet::CGIHandler
を使います
また Ruby スクリプト内で cgi を使うようにしましょう
vim view.rb
#!/usr/local/opt/ruby/bin/ruby
require 'cgi'
cgi = CGI.new
html = <<-EOF
<html>
<head>
<title>cgi test</title>
</head>
<body>
<h1>Hello</h1>
</body>
</html>
EOF
puts cgi.header
puts html
chmod 755 view.rb
またシェバングと権限の変更を忘れないように行いましょう
vim app.rb
require 'webrick'
srv = WEBrick::HTTPServer.new({
:DocumentRoot => './',
:BindAddress => '127.0.0.1',
:Port => 20080
})
srv.mount('/view.cgi', WEBrick::HTTPServlet::CGIHandler, 'view.rb')
trap("INT"){ srv.shutdown }
srv.start
これで localhost:20080/view.cgi
を確認すると「hello」が返ってくることが確認できると思います
HTML を表示する
単純に HTML を表示することもできます
vim test.html
<html>
<head>
<title>test html</title>
</head>
<body>
<h1>Test html</h1>
</body>
</html>
vim app.rb
require 'webrick'
srv = WEBrick::HTTPServer.new({
:DocumentRoot => './',
:BindAddress => '127.0.0.1',
:Port => 20080
})
srv.mount('/hoge.html', WEBrick::HTTPServlet::FileHandler, 'test.html')
trap("INT"){ srv.shutdown }
srv.start
http://localhost:20080/hoge.html
にアクセスすると test.html の内容が表示されるのが確認できると思います
最後に
素の Webrick を使ってみました
最低限の Web サーバを構築するための機能が実装されているのでこれらを使ってフレームワークなどが作られている感じかなと思います
0 件のコメント:
コメントを投稿