dancer cookbook 小议5

config->{environment}='production'. Of course, this value does not get written in any file; it only lives in memory and your webapp doesn't have access to it, but you can use it inside your script.

Logging

Configuring logging

It's possible to log messages generated by the application and by Dancer itself.

To start logging, select the logging engine you wish to use with the logger setting; Dancer includes built-in log engines named file and console, which log to a logfile and to the console respectively.

To enable logging to a file, add the following to your config.yml:

logger: 'file' 

Then you can choose which kind of messages you want to actually log:

log: 'core'  # will log all messages, including messages from 

# Dancer itself

log: 'debug'     # will log debug, info, warning and error messages

log: 'info'      # will log info, warning and error messages

log: 'warning'   # will log warning and error messages

log: 'error'     # will log error messages 

If you're using the file logging engine, a directory appdir/logs will be created and will host one logfile per environment. The log message contains the time it was written, the PID of the current process, the message and the caller information (file and line).

Logging your own messages

Just call debug, warning, error or info with your message:

debug "This is a debug message from my app."; 

RESTING

Writing a REST application

With Dancer, it's easy to write REST applications. Dancer provides helpers to serialize and deserialize for the following data formats:

JSON 

YAML 

XML 

Data::Dumper 

To activate this feature, you only have to set the serializer setting to the format you require, for instance in your config.yml:

serializer: JSON 

Or right in your code:

set serializer => 'JSON'; 

From now, all hash ref or array ref returned by a route will be serialized to the format you chose, and all data received from POST or PUT requests will be automatically deserialized.

get '/hello/:name' => sub {

# this structure will be returned to the client as    # {"name":"$name"}

return {name => params->{name}};

}; 

It's possible to let the client choose which serializer he want to use. For this, use the mutable serializer, and an appropriate serializer will be chosen from the Content-Type header.

It's also possible to return a custom error, using the send_error keyword.. When you don't use a serializer, the send_error function will take a string as first parameter (the message), and an optional HTTP code. When using a serializer, the message can be a string, an arrayref or a hashref:

get '/hello/:name' => sub {

    if (...) {

send_error("you can't do that"); 

# or 

send_error({reason => 'access denied', message => "no"});

}

}; 

The content of the error will be serialized using the appropriate serializer.

Deploying your Dancer applications

For examples on deploying your Dancer applications (including standalone, behind proxy/load-balancing software, and using common web servers including Apache to run via CGI/FastCGI etc, see Dancer::Deployment.

DANCER ON THE STAGE: DEPLOYMENT

Plack middlewares

If you deploy with Plack and use some Plack middlewares, you can enable them directly from Dancer's configuration files.

Generic middlewares

To enable middlewares in Dancer, you just have to set the plack_middlewares setting like the following:

set plack_middlewares => [ 

   [ 'SomeMiddleware' => [ qw(some options for somemiddleware) ]],

]; 

For instance, if you want to enable Plack::Middleware::Debug in your Dancer application, all you have to do is to set plack_middlewares like that:

set plack_middlewares => [

    [ 'Debug' => [ 'panels' => [qw(DBITrace Memory Timer)] ] ],

]; 

Of course, you can also put this configuration into your config.yml file, or even in your environment configuration files:

# environments/development.yml

...

plack_middlewares:

  -   

- Debug       # first element of the array is the name of the middleware    -        

- panels  # following elements are the configuration ofthe middleware        

- DBITrace 

- Memory 

- Timer 

Path-based middlewares

If you want to setup a middleware for a specific path, you can do that using plack_middlewares_map. You'll need Plack::App::URLMap to do that.

plack_middlewares_map:

    '/':      ['Debug']

    '/timer': ['Timer'], 

AUTHORS

Dancer contributors - see AUTHORS file.

你可能感兴趣的:(Web,framework,Cookbook,dancer)