読者です 読者をやめる 読者になる 読者になる

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【perl】Perl module 依存マネージャーcartonをmac × plenv × cpanm環境で使うメモ

はじめに

自分のmacではperlを使うにあたりplenvを使用しているので、
アプリやらサービスやらのディレクトリ内のperlバージョンはplenvで管理・固定しています。

モジュールはそんなに気にしていなかったのですが、
モジュール管理としてちょいちょいcarton使うことがあったので一連のメモを残しておきます。

アジェンダ

  1. plenvいれる
  2. cartonいれる

1. plenvいれる

これは別途記事があるのでそちらを参考にしてみてください
【perl】plenvでperl x cpanm x carton環境を作る - mac編

2. cartonいれる

1のplenvとcpanmまで入っていたらあとはすぐですが、
こんなながれでやります

  • plenv経由のcpanmでcartonインストール
  • plenv経由のcartonコマンドでcpanfileを指定してモジュールインストール
  • plenv rehash
plenv経由のcpanmでcartonインストール
※ plenv管理化のディレクトリに移動
$ cd plenv管理化のディレクトリ

※ cartonで必要らしい
$ plenv exec cpanm Module::Install

※ plenvのcpanm経由でCartonインストール
$ plenv exec cpanm Carton

※ 試しに打ってみる
※ 当然まだcpanfile作ってないので怒られる
$ plenv exec carton
Can't locate cpanfile: (cpanfile)
plenv経由のcartonコマンドでcpanfileを指定してモジュールインストール
※ cpanfile作る
$ echo "requires 'Task::Plack';" > cpanfile

※ carton経由でcpanfileのモジュール(今回はplack)いれる
$ plenv exec carton install

※ 無駄にもう一度叩いてみる
※ 入ってるよと教えてくれる
$ plenv exec carton install
Installing modules using /Users/hoge/apps/sample-app/cpanfile
Complete! Modules were installed into /Users/hoge/apps/sample-app/local

※ すばらしい!
補足

cpanfileの記述に関してはこのあたりが詳しいですね。

plenv rehash

plenv rehashは新しいperlバージョンやモジュールをインストールしたらそれを認識?させるためのものです。

plenvを介してcpanmを実行した場合は勝手に呼ばれるもんだと思っていたんですが、
自前で打たないと効かなかったのでそんなときはplenv rehashを実行します。

$ carton exec plackup
-bash: carton: command not found

$ plenv rehash

※ 当然までだ作ってないのでアプリケーションがないと怒られるものの
※ cartonコマンド自体は動く
$ carton exec plackup
Error while loading /Users/hoge/apps/sample-app/app.psgi: No such file or directory at (eval 9) line 4.

参考 : plenv環境下でcpanmを使ってモジュールを導入した後にrehashを忘れて辛い

参考

ほとんどまんま使わせてもらっちゃいましたがこちらとても参考になりました!thx!

plenv + cpanm + cartonでハマった

まとめ

今までサボってたけどcartonとかもちゃんと勉強せねば(><)