I know a Rack middleware filter is a Ruby class with an initialize and a call method. I know the call method takes an "env" argument. Something like this:
class MyFilter def initialize(app) end def call(env) end end
My question is: what exactly is the "env" argument sent to "call"? Is this the same as the Rails ENV environment (ie. development, testing, production).
Thanks!
Environment variables contain a name and value, and provide a simple way to share configuration settings between multiple applications and processes in Linux. For example, Cloud 66 creates environment variables for your database server address, which can be referenced in your code.
Use command ENV in rails console. That will return a hash of your environmental values you can access. Alternatively, you can access your environmental variables from your apps root path using the same command and the variables will be returned formatted.
Linux environment variables are dynamic variables used by a shell and its child processes. Environment variables define a variety of aspects related to how a Linux system works. For example, a user's default shell is defined in the SHELL variable.
env
is just a hash. Rack itself and various middlewares add values into it.
To understand what the various keys are in the hash, check out the Rack Specification.
And here is a sample env hash:
{ "GATEWAY_INTERFACE" => "CGI/1.1", "PATH_INFO" => "/index.html", "QUERY_STRING" => "", "REMOTE_ADDR" => "::1", "REMOTE_HOST" => "localhost", "REQUEST_METHOD" => "GET", "REQUEST_URI" => "http://localhost:3000/index.html", "SCRIPT_NAME" => "", "SERVER_NAME" => "localhost", "SERVER_PORT" => "3000", "SERVER_PROTOCOL" => "HTTP/1.1", "SERVER_SOFTWARE" => "WEBrick/1.3.1 (Ruby/2.0.0/2013-11-22)", "HTTP_HOST" => "localhost:3000", "HTTP_USER_AGENT" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:26.0) Gecko/20100101 Firefox/26.0", "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "HTTP_ACCEPT_LANGUAGE" => "zh-tw,zh;q=0.8,en-us;q=0.5,en;q=0.3", "HTTP_ACCEPT_ENCODING" => "gzip, deflate", "HTTP_COOKIE" => "jsonrpc.session=3iqp3ydRwFyqjcfO0GT2bzUh.bacc2786c7a81df0d0e950bec8fa1a9b1ba0bb61", "HTTP_CONNECTION" => "keep-alive", "HTTP_CACHE_CONTROL" => "max-age=0", "rack.version" => [1, 2], "rack.input" => #<StringIO:0x007fa1bce039f8>, "rack.errors" => #<IO:<STDERR>>, "rack.multithread" => true, "rack.multiprocess" => false, "rack.run_once" => false, "rack.url_scheme" => "http", "HTTP_VERSION" => "HTTP/1.1", "REQUEST_PATH" => "/index.html" }
And to make it easier to use, checkout Rack::Request which makes it easier to access the values inside the env hash.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With