文章

受限环境(虚拟主机无 root 权限)下的 Dancer2 开发

受限环境(虚拟主机无 root 权限)下的 Dancer2 开发

cpanm 安装

1
2
3
4
wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.bashrc
echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.bashrc

Perl 模块安装

1
cpanm Dancer2 JSON

新建应用

当前目录假设为:/home/testorg/apps/

1
dancer2 gen -a MyWebApp

修改应用配置:

修改:config.yml

增加如下:

1
2
3
environment: "production"
session: "YAML"
serializer: "JSON"

修改应用代码

进入:MyWebApp 目录,修改:lib/MyWebApp.pm 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package MyWebApp;
use Dancer2;

our $VERSION = '0.1';

get '/' => sub {
    return { message => "Pong!" };
};

get '/test' => sub {
    return { message => "This is the test route!" };
};

true;

cgi-bin 目录下的配置

新建,如果没有这个文件:.htaccess,内容:

1
2
3
4
5
6
7
8
9
Options +ExecCGI
AddHandler cgi-script cgi
DirectoryIndex index.cgi

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.cgi/$1 [L]

调用 Dancer2 App 的通用模板

比如文件名为:index.cgi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env perl
use strict;
use warnings;

use lib '/home/testorg/perl5/lib/perl5';

use Plack::Handler::CGI;

# 导入 Dancer2 应用程序
use lib "/home/testorg/apps/MyWebApp/lib";
use MyWebApp;

# 创建 CGI 适配器
my $app = MyWebApp->to_app;

Plack::Handler::CGI->new->run($app);

结尾

此时调用:https://your-domain-url/test,会显示:

1
2
3
{
"message": "This is the test route!"
}

备注

如果是纯 API 应用,可以删除 Dancer2 自动生成的 public、views 目录。

卸载自安装的 Perl 模块

删目录:

1
2
rm -fr ~/perl5
rm -fr .cpanm

删环境,.bashrc 中,删除这两行:

eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
export MANPATH=$HOME/perl5/man:$MANPATH
本文由作者按照 CC BY 4.0 进行授权