MacOS10.7にMojoliciousを入れて、herokuにdeployするまで

#概要

- Perlbrewのインストール
- Perlのインストール
- cpanmのインストール
- Mojoliciousのインストール
- Herokuに載せる為のパッケージインストール
- Herokuにデプロイ(Git)


#Perlbrewのインストール

````Perlbrewのインストール
$ curl -kL https://raw.github.com/gugod/App-perlbrew/13f760afd72762bbf253bf3070efee12b9a33cef/perlbrew > perlbrew

$ perl perlbrew install
The perlbrew is installed as:

    ~/perl5/perlbrew/bin/perlbrew

You may trash the downloaded /usr/local/bin/perlbrew from now on.
Perlbrew environment initiated under ~/perl5/perlbrew
Append the following piece of code to the end of your ~/.zshenv and start a new shell, perlbrew should be up and fully functional from there:

    source ~/perl5/perlbrew/etc/bashrc

For further instructions, simply run `perlbrew` to see the help message.

Happy brewing!
````

はい、楽しみましょう(・∀・)！
ってことで、次はお使いのシェルにperlbrewのPATHをカキコφ(｀д´)ｶｷｶｷ

````perlbrewのPATH指定
$ echo "source ~/perl5/perlbrew/etc/bashrc" >> ~/.bashrc
$ echo "source ~/perl5/perlbrew/etc/bashrc" >> ~/.zshrc

$ source ~/.bashrc
$ source ~/.zshrc
````

変更を反映させたら、Perlのインスコ。
今回はMacのPerlのバージョンが低かったので、5.14.2を入れます。

#Perlインストール

````Perlのインストール
$ sudo perlbrew install perl-5.14.2 
Fetching perl-5.14.2 as /Users/suyama/perl5/perlbrew/dists/perl-5.14.2.tar.bz2
Installing /Users/suyama/perl5/perlbrew/build/perl-5.14.2 into ~/perl5/perlbrew/perls/perl-5.14.2

This could take a while. You can run the following command on another shell to track the status:

  tail -f ~/perl5/perlbrew/build.log

# ここで止まります。20分くらい？

Installed /Users/suyama/perl5/perlbrew/build/perl-5.14.2 as perl-5.14.2 successfully. Run the following command to switch to it.

  perlbrew switch perl-5.14.2
````

30分くらいかかりましたc(`Д´と⌒ｃ)つ彡 ﾔﾀﾞﾔﾀﾞ 
お疲れ様でした。

本当にインスコされたのか確認します。

````Perlbrewでの確認
$ perlbrew list
  perl-5.14.2
````

確認が出来たら、インスコした Perlを使えるように設定します。

````Perlの変更
$ perlbrew switch perl-5.14.2
$ perlbrew list            
* perl-5.14.2
````

*がついていたらOK.
一応バージョン確認

````バージョン確認
$ perl -v
This is perl 5, version 14, subversion 2 (v5.14.2) built for darwin-2level
````


#Cpanmのインストール

はい、次はcpanのモジュールをインスコします。
Mojoliciousのインスコをcpanmで行いたいからです。

````perlbrewでcpanmのインストール
$ perlbrew install-cpanm
cpanm is installed to
     /Users/suyama/perl5/perlbrew/bin/cpanm
````

##cpanmが動くかチェック

````cpanmでJSONのインストール
$ cpanm JSON
````

これが通ったら、インスコ準備完了ってことです。
いざ。

#Mojoliciousのインストール

````Mojoliciousのインストール
$ sudo cpanm Mojolicious
Password:
--> Working on Mojolicious
Fetching http://www.cpan.org/authors/id/S/SR/SRI/Mojolicious-3.95.tar.gz ... OK
Configuring Mojolicious-3.95 ... OK
Building and testing Mojolicious-3.95 ... OK
Successfully installed Mojolicious-3.95
1 distribution installed
````

インスコできました(・∀・)！

それでは、適当なワーキングディレクトリに以下を作成。ハローワールドしますよーHello(^^)!

````
$ mkdir hellomojo
$ cd hellomojo
$ touch myapp.pl
$ chmod +x myapp.pl
$ vim myapp.pl
````

````hellomojo/myapp.pl
#!/usr/bin/env perl
use Mojolicious::Lite;

get '/' => sub {
  my $self = shift;
  $self->render('index');
};

app->start;
__DATA__

@@ index.html.ep
% layout 'default';
% title 'Welcome';
Welcome to the Mojolicious real-time web framework!

@@ layouts/default.html.ep
<!DOCTYPE html>
<html>
  <head><title><%= title %></title></head>
  <body><%= content %></body>
</html>
````

コードは以上の通り。もっと簡単にもできますが、それは次回以降。
サーバーを動かします。morboコマンドを使うようです。

````サーバー起動
$ morbo myqpp.pl      
[Mon Apr 22 13:35:24 2013] [info] Listening at "http://*:3000".
Server available at http://127.0.0.1:3000.
[Mon Apr 22 13:35:57 2013] [debug] Your secret passphrase needs to be changed!!!
[Mon Apr 22 13:35:57 2013] [debug] GET / (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31).
[Mon Apr 22 13:35:57 2013] [debug] Routing to a callback.
[Mon Apr 22 13:35:57 2013] [debug] 200 OK (0.001101s, 908.265/s).

        ・
        ・
        ・
````

はい、[アクセスしまーす(∞*･3･*)ﾉｶﾞﾝﾊﾞｯﾃｰ](http://127.0.0.1:3000)
真っ白な画面の左上に地味に、Hello worldって出てたらOK！

# herokuに載せる準備

ちょっと面倒くさいです。
[このパッケージを全力で利用します(;`ー´)o/￣￣~>ﾟ))彡](http://github.com/judofyr/perloku.git)

## Toolbelt

ひとまずtoolbeltを入れてない場合は、入れましょう。
[ここから](https://toolbelt.heroku.com/)どうぞ。

## ファイル作成など

次に先ほどのディレクトリのmyapp.plと同じ階層に、Makefile.PLとPerlokuを作成します。

````
$ heroku login
Enter your Heroku credentials.
Email:

$ touch Makefile.PL
$ touch Perloku
$ chmod +x Perloku
````

````Makefile.PL
use strict;
use warnings;
use ExtUtils::MakeMaker;

WriteMakefile(
  NAME         => 'myapp.pl',
  VERSION      => '1.0',
  AUTHOR       => 'Funyamora Funya <hogehoge@hogenne.com>',
  EXE_FILES    => ['myapp.pl'],
  PREREQ_PM    => {'Mojolicious' => '2.0'},
  test         => {TESTS => 't/*.t'}
);
````

````Perloku
#!/bin/sh
./myapp.pl daemon -l http://*:$PORT -m production
````

必要なファイルは出来ました。
これらをherokuにのっけます！
手順は普通です。

#herokuにデプロイ(Git)

まずは、herokuにアプリ作成をし、先ほど挙げたパッケージを読み込ませます。

````これがキモ
$ heroku create -s cedar --buildpack http://github.com/judofyr/perloku.git
Creating shielded-fjord-8979... done, stack is cedar
BUILDPACK_URL=http://github.com/judofyr/perloku.git
http://shielded-fjord-8979.herokuapp.com/ | git@heroku.com:shielded-fjord-8979.git
Git remote heroku added
````

一応確認

````remoteリポジトリの確認
$ git remote
heroku
````

あとは、通常通りです。

````
$ git add .
$ git commit -m ""
Aborting commit due to empty commit message.
````

````push
$ git push heroku master
Warning: Permanently added the RSA host key for IP address 'xxx.xxx.xxx.xxx' to the list of known hosts.
error: src refspec master does not match any.
error: failed to push some refs to 'git@heroku.com:hoge-katana-funya,8111.git'
````

これはコミット忘れかもってことで、コミットしてもう一度。

````ダメなcommit
$ git commit -m ""
Aborting commit due to empty commit message.
````

あー たまにやるミスです（私が）
""  の中を埋めなきゃだめなんだ。
では

````正しいcommit
$ git commit -m "initial commit"
[master (root-commit) db7199b] initial
 3 files changed, 17 insertions(+)
 create mode 100644 Makefile.PL
 create mode 100755 Perloku
 create mode 100755 myapp.pl
````

良い感じ。

````push
$ git push heroku master
````

errorメッセージが出てなければうまく行った感じになります◎

viewの確認は、Herokuで割り当てられているURLにアクセスしてみて下さい。
白い背景に上で入力した文字が出ていればOKです。
見事、HerokuにMojoliciousで作ったコードを載っけられました。


ref) [サンプルコードによるPerl入門](http://d.hatena.ne.jp/perlcodesample/20120417/1334837659)
ref) [Sebastian Riedel about Perl and the Web](http://blog.kraih.com/post/43199102900/mojolicious-in-the-cloud-hello-heroku)
ref) https://github.com/judofyr/perloku