Perl Dancer + mysql + memcached
Наверняка, подавляющее большинство программистов на Perl слышали о замечательном микро-фрэймворке Perl Dancer. Но использовали ли они его дальше, чем просто сгенерить проект, написать роут с ‘Hello world’ и запустить его?
А, тем временем, этот вэб-фреймворк вполне функционален и быстр. Сессии, база данных, кэширование, отправка почты, маршруты, макет и шаблоны — что еще надо для того, чтобы быстро запустить небольшой проект?
Итак, создать новый, почти пустой, проект просто:
dancer -a AppName
После чего появится каталог ./AppName с нашим приложением, которое можно запустить так:
cd AppName
bin/app.pl
После чего наше приложение будет доступно по http://0.0.0.0:3000
В заголовок поста я вынес не только сам Dancer, но и MySQL с Memcached. Так давайте попробуем подружить их.
Подключение к базе данных у нас будет в конфигурационном файлу ./config.yml в разделе Plugins — Database:
plugins:
Database:
driver: 'mysql'
database: 'basename'
host: 'localhost'
port: 3306
username: 'user'
password: 'userPassword'
Тут же, и настройка подключения к memcached:
Memcached:
servers:
- "127.0.0.1:11211"
default_timeout: 10
Определить, где будут храниться cookie можно тоже тут:
session: "cookie"
session_cookie_key: "m5M7gM3rH4BFOd782fPo3iiom33W77P5ytE1zHqJijG3GqxL"
Итак, теперь мы можем использовать все это добро у нас в приложении:
package App;
use Dancer ':syntax';
use Dancer::Plugin::Database;
use Dancer::Plugin::Memcached;
get '/' => sub {
my $m_root = memcached_get('page-root');
unless ($m_root) {
my $data;
my $m_data = memcached_get('root-page-select');
unless ($m_data) {
$data = database->quick_select('table', { col => 'variable' }, { limit => 20 });
} else {
$data = $m_data;
}
# код
memcached_store 'root-page', \@rootPage;
} else {
@rootPage = @{$m_root};
}
template 'templateName', { var => \@rootPage };
};
Как-то вот так. В данном куске кода я привел два случая кэширования — целиком всех переменных для передачи их шаблонизатору и кэширование только запроса. Выбирайте то, что вам нужно в конкретной ситуации.
Кстати, с Dancer’ом я использую шаблонизатор TemplateToolkit, но после того, как попробовал Sinatra/Haml — стал относиться к нему совсем иначе.