[~/local/src/ruby/sinatra/rack/rack-static(master)]$ tree . |--- README |--- README.md |--- Rakefile |--- config.ru |--- myapp.rb `---- public `--- index.html
1 directory, 6 files
[~/local/src/ruby/sinatra/rack/rack-static(master)]$ cat public/index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
[~/local/src/ruby/sinatra/rack/rack-static(master)]$ cat config.ru require './myapp' use Rack::Static, :urls => ["/public"] run MyApp.new
[~/local/src/ruby/sinatra/rack/rack-static(master)]$ cat Rakefile task :default => :server desc "run server" task :server do sh "rackup" end desc "run client via curl" task :client do sh "curl -v localhost:9292" end desc "access to static file" task :index do sh "curl -v localhost:9292/public/index.html" end
[~/local/src/ruby/sinatra/rack/rack-static(master)]$ cat myapp.rb
# my_app.rb
#
class MyApp
def call env
[200, {"Content-Type" => "text/html"}, ["Hello SYTW!"]]
end
end
[~/local/src/ruby/sinatra/rack/rack-static(master)]$ rake client curl -v localhost:9292 * About to connect() to localhost port 9292 (#0) * Trying ::1... Connection refused * Trying 127.0.0.1... connected * Connected to localhost (127.0.0.1) port 9292 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8y zlib/1.2.5 > Host: localhost:9292 > Accept: */* > < HTTP/1.1 200 OK < Content-Type: text/html < Transfer-Encoding: chunked < Connection: close < Server: thin 1.5.1 codename Straight Razor < * Closing connection #0 Hello SYTW!
[~/local/src/ruby/sinatra/rack/rack-static(master)]$ rake index
curl -v localhost:9292/public/index.html
* About to connect() to localhost port 9292 (#0)
* Trying ::1... Connection refused
* Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 9292 (#0)
> GET /public/index.html HTTP/1.1
> User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8y zlib/1.2.5
> Host: localhost:9292
> Accept: */*
>
< HTTP/1.1 200 OK
< Last-Modified: Thu, 03 Oct 2013 08:24:43 GMT
< Content-Type: text/html
< Content-Length: 227
< Connection: keep-alive
< Server: thin 1.5.1 codename Straight Razor
<
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
* Connection #0 to host localhost left intact
* Closing connection #0
rackup converts the supplied rack config file to an instance of Rack::Builder.
In short, rack config files are evaluated within the context of a Rack::Builder
object.
Rackup also has a use method that accepts a middleware. Let us use one of Rack’s built-in middleware.
[~/sinatra/rackup/middleware]$ cat config.ru require './myapp' require './myrackmiddleware' use Rack::Reloader use MyRackMiddleware run MyApp.new
[~/sinatra/rackup/middleware]$ cat myapp.rb
# myapp.rb
class MyApp
def call(env)
[200, {"Content-Type" => "text/html"}, ["Hello Rack Participants from across the globe"]]
end
end
[~/sinatra/rackup/middleware]$ cat myrackmiddleware.rb
class MyRackMiddleware
def initialize(appl)
@appl = appl
end
def call(env)
status, headers, body = @appl.call(env)
append_s = "... greetings from RubyLearning!!"
[status, headers, body << append_s]
end
end
Casiano Rodríguez León