1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WEBrickでちょっとしたApplicationサーバーをたてる

Last updated at Posted at 2020-03-04

背景

Faradayを使って外部のAPIからデータを取得するスクリプトを書いているけど、HttpStatusによる挙動をテストしたい。外部APIなので、いろんなレスポンスのHttpStatusを自由に変更できないので、自前でテスト用のサーバーを用意したいけど手間を掛けたくない。そんな時にWEBrickで簡単に環境を作れるよ、というお話。

Webrickの起動と使い方

WEBRickサーバーの起動用スクリプトと、ページ用のスクリプトを用意する。

webrick.rb
#!/usr/local/bin/ruby
# frozen_string_literal: true

require 'webrick'
opts  = {
  BindAddress:    '0.0.0.0',
  Port:           '7777',
  DocumentRoot:   './',
  CGIInterpreter: '/usr/local/bin/ruby'  # 環境による。DockerのRubyコンテナならこれでいい
}

server = WEBrick::HTTPServer.new(opts)

# /page にアクセスしたら page.rb を cgi で動かす
server.mount('/page', WEBrick::HTTPServlet::CGIHandler,  './page.rb')

Signal.trap(:INT){ server.server } # Ctrl+C で止める

server.start  # サーバースタート
page.rb
#!/usr/local/bin/ruby
# frozen_string_literal: true
$SAFE = 1
require 'cgi'
cgi = CGI.new

cgi.out(type: 'text/html',
        charset: 'UTF-8',
        status: 200) do
  # return する文字列がBodyとして出力される
  '<html>Hello World</html>'
end

これらを同じディレクトリに設置して webrick.rb を実行すればよい。

$ ruby webrick.rb
[2020-03-04 02:43:08] INFO  WEBrick 1.4.2
[2020-03-04 02:43:08] INFO  ruby 2.6.3 (2019-04-16) [x86_64-linux]
[2020-03-04 02:43:08] INFO  WEBrick::HTTPServer#start: pid=240 port=7777

これでhttp://localhost:7777/にアクセス出来る。

CGIでRubyファイルを実行しているのだ

webrick.rb でWEBRickサーバーの実行を書いている。特に難しい内容はない。server.mount('/page', WEBrick::HTTPServlet::CGIHandler, './page.rb')としているので、http://localhost:7777/page に接続すると page.rb が実行される。

エンドポイントを追加したい場合は同じようにマウントしてやれば良い。

webrick.rbCGIInterpreterを指定しているのでRubyでcgiが実行される。

page.rb でHTTP Status Code を変える

page.rb で普通にRubyのコードを書いたら良い。これも難しいことはない。
ハッシュの status: 200 を404にしたり502にすればよい。

もろもろめんどくさいからワンライナーでいいじゃん

$ ruby -rwebrick -e 'Thread.start{s=WEBrick::HTTPServer.new(
DocumentRoot:".", Port:"7777", CGIInterpreter:"/usr/local/bin/ruby");
s.mount("/page", WEBrick::HTTPServlet::CGIHandler, "./page.rb");
s.start}; gets'

http://localhost:7777/pageにアクセス出来る

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?