順番
- gitインストール
- plenvインストール
- cpanmインストール(plenv経由)
- Cartonインストール
- Mojoliciousインストール
- Cinnamonインストール
plenv
# plenvのバージョン plenv --version # インストール可能なPerl $ plenv install --list # バイナリインストール $ plenv install 5.16.2 -Dusethreads # change global default perl to 5.16.2 $ plenv global 5.16.2 # change local perl to 5.14.0 $ plenv local 5.14.0 # run this command after install cpan module, contains executable script. $ plenv rehash # アップグレード $ cd ~/.plenv $ git pull # インストール済みリスト $ plenv versions # 現在のPerl $ plenv version # install cpanm to current perl $ plenv install-cpanm
cpanm
# 現在のPerlバージョンを確認して、plenv経由でインストール $ plenv install-cpanm # cpanmバージョン確認 $ cpanm -V # 自身のアップデート $ plenv exec cpanm --self-upgrade # モジュールのインストール $ plenv exec cpanm Plack $ plenv exec cpanm Plack/Request.pm $ plenv exec cpanm MIYAGAWA/Plack-1.0000.tar.gz $ plenv exec cpanm /path/to/Plack-1.0000.tar.gz $ plenv exec cpanm http://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/Plack-0.9990.tar.gz $ plenv exec cpanm git://github.com/plack/Plack.git # 1.0000 以降 $ plenv exec cpanm Plack~1.0000 # 最新の 1.xxxx $ plenv exec cpanm Plack~">= 1.0000, < 2.0000" # 特定のバージョン。 Plack~"== 0.9990"と同じ $ plenv exec cpanm Plack@0.9990
モジュールの確認
# CGI.pmの場所 $ perldoc -l CGI /Users/yugo/.plenv/versions/5.18.1/lib/perl5/5.18.1/CGI.pm
Carton
「アプリケーションにおけるPerlモジュールの依存関係を管理するコマンドラインツール」
# インストール $ plenv exec cpanm Carton # 確認 $ plenv exec carton -v # カレントディレクトリのcpanfileファイルを参照して # カレントディレクトリ直下のlocalディレクトリにモジュールをインストール # ※cpanfile.snapshotに記録される $ plenv exec carton install # cpanfileを元に… $ plenv exec carton install # cpanfile.snapshotを元に… $ plenv exec carton install --deployment
cpanfile
# 0.03 またはそれ以上 requires 'Yugo', '0.03'; # 0.03 requires 'Yugo', '== 0.03'; # 以上とか以下とか requires 'Yugo', '<= 0.03'; requires 'Yugo', '< 0.03'; requires 'Yugo', '> 0.03'; requires 'Yugo', '>= 0.03'; # Perlの指定も可(cartonとcpanmが反応) requires 'perl', '5.16.3';
Mojolicious
- Mojolicious · yuki-kimoto/mojolicious-guides-japanese Wiki · GitHub(日本語ガイド)
- Mojoliciousでつくる! Webアプリ入門(Slideshare)
$ mkdir bloc $ cd bloc $ nano cpanfile requires 'perl', '5.16.3'; requires 'Mojolicious', '== 4.65'; requires 'Plack', '== 1.0030'; $ plenv exec carton install # "carton exec"の後ろに" -- "でつないでコマンド $ plenv exec carton exec -- mojo generate app Bloc::Web $ mkdir psgi $ cd psgi $ nano bloc.psgi use strict; use warnings; use Mojo::Server::PSGI; use Plack::Builder; use lib './lib'; use Bloc::Web; my $psgi = Mojo::Server::PSGI->new( app => Bloc::Web->new ); my $app = $psgi->to_psgi_app; builder { $app; }; $ cd .. $ plenv exec carton exec -- plackup -p 5000./psgi/bloc.psgi
Cinnamon
いろんな変数を設定しつつ、リモートで動かすコマンドをあれこれ記述。
コピーしたり、起動したり、読み込んだり、再起動したり。
Roleというのが「production」とか「develop」とかっていう環境セットとかで、、「update」とか「restart」とかっていうあれこれの動きはTask。
実際のコマンドは例えば「cinnamon production update」とか。
# インストール $ plenv exec cpanm Cinnamon # → cinnamon コマンドが入る # cinnamon コマンドは config/deploy.pl を自動的に見に行く。 # …ので、アプリケーションのルートから見てconfig/deploy.plに記述するとよい。 # !ここでいったん中断→gitが分かってないとCinnamonの理解はビミョウ。
- 記述されたコマンドは、そのコマンドごとにログイン/ログアウトするので、cdしてからのコマンドは「&&」でつないで。
- 複雑になるようなら、シェルスクリプトにまとめて。
サンプル
use strict; use warnings; use Cinnamon::DSL; my $application = 'My::App'; # リモートホストに接続するならログインユーザ名が必要 set user => 'johndoe';
DSL
# role role production => 'production.example.com'; role production => [ qw(production1.example.com production2.exampl.ecom) ]; role production => sub { my $res = LWP::UserAgent->get('http://servers.example.com/api/hosts'); my $hosts = decode_json $res->content; $hosts; }; role production => 'production.example.com', { hoge => 'fuga', }; # task task update => sub { my ($host) = @_; my $hoge = get 'hoge'; # parameter set in global or role parameter # ... }; task server => { start => sub { my ($host) = @_; # ... }, stop => sub { my ($host) = @_; # ... }, }; # set set key => 'value'; set key => sub { # values to be lazily evaluated }; set key => sub { my (@args) = @_; # value to be lazily evaluated with @args }; # get my $value = get 'key'; my $value = get key => qw(foo bar baz); # run my ($stdout, $stderr) = run 'git', 'pull'; # sudo my ($stdout, $stderr) = sudo '/path/to/httpd', 'restart'; # remote my ($stdout, $stderr) = remote { run 'git', 'pull'; sudo '/path/to/httpd', 'restart'; } $host; # call task deploy => sub { my ($host) = @_; call "update", $host; call "web:restart", $host; };
Git
- コミットメッセージでは、1行目が変更内容の要約、1行あけて、3行目に変更した理由、が標準的?
- 実際に作業しているディレクトリを「ワークツリー」。
- ワークツリーとリポジトリの間に「インデックス」(準備場所)が用意される。
- ディレクトリに新規ファイルを作る。
- INDEXにステージする。
- コミットメッセージを入力して、コミットする。
- リモートリポジトリにはoriginという名前を付けるのが一般的。
# INDEXへ追加 $ git add sample.txt # push # clone # pull