0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【エラー】Perl,Amon2構築中エラーとなった話 vol.1-2

Posted at

はじめに

下記記事でエラー部分は省いた環境構築の記事を投稿しました。使用したコマンドの数は少なく、当初「これだけでできるんだ、楽勝😊」と思っていましたが、実はエラーが発生しています😢

あくまで私の環境での事なので、同様の事が必ずしも発生するとは限りません。

では実際、どこでどんなエラーが発生していて、どう解決したのかについて共有できればと思います。
下記記事と併せてご参照ください

1:carton installでエラー

$ cd <プロジェクト名>
$ carton install
Command 'carton' not found, but can be installed with:
sudo apt install carton
  • cartonが見つからないらしい
  • cpanm Cartonでインストールした Cartonが「ホームディレクトリのローカルパス」にインストールされていて「システムの通常のパス」に含まれていないことが原因

1-1:cpanm Cartonコマンド実行時、最後の方にあったメッセージのコマンドを実行する

(人によっては違うかもしれませんが参考までに。)

$ cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
上記コマンドの解説

1. cpanm --local-lib=~/perl5 local::lib

  • cpanm:
    Perlのモジュールをインストールするためのコマンド(CPAN Minus)。
  • -local-lib=~/perl5:
    モジュールをシステム全体ではなく、自分のユーザー専用のローカルディレクトリ(~/perl5)にインストールします。
  • local::lib:
    Perlのモジュールをローカルディレクトリで管理するための仕組みを提供するモジュール。
    • このコマンドでは、local::lib モジュールをローカルにインストールしています。

2. eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)

  • perl -I ~/perl5/lib/perl5/ -Mlocal::lib:
    • ローカルディレクトリ(~/perl5)をPerlのライブラリ検索パスに追加します。
    • I オプションで検索パスを指定。
    • Mlocal::liblocal::lib をロードします。
  • eval:
    perl コマンドの出力を実行して、現在のシェル環境に反映させます。この部分は、ローカルディレクトリにモジュールをインストールした後、そのディレクトリをPerlがモジュールを検索するパスに追加する設定を行います。

まとめると

  1. local::lib モジュールをローカル(~/perl5)にインストールする。
  2. ローカルディレクトリ(~/perl5)をPerlのライブラリ検索パスに追加して、ローカルのモジュールが正しく認識されるように設定する。

なぜこのコマンドが必要なのか?

  1. 通常のモジュールインストールでは管理者権限が必要:
    システム全体(/usr/local/...)にモジュールをインストールするには管理者権限が必要ですが、このコマンドではローカルディレクトリ(~/perl5)を使うため、管理者権限が不要になります。
  2. 環境を分離して管理:
    プロジェクトごとに異なるモジュールやバージョンを使いたい場合、ローカルディレクトリを使うと便利です。この方法でシステムに影響を与えずに環境を整備できます。

1-2:再度 carton installコマンドで依存モジュールをインストールを試す

$ carton install
・
・
Complete!

1-3:サーバーを起動してみる

$ carton exec -- perl -Ilib script/<プロジェクト名>-server
  • carton installでインストールしたモジュールを利用しながら, Perlのスクリプトを動かすには, carton execを利用する
  • amon2-setup.plで雛形を生成した際にあった起動用コマンドを使用する

2:サーバー起動でエラー

1-3で「よし、これで後はサーバー起動できれば第一段階完了だ」。と思いましたがエラーとなってしまいました😢

$ carton exec -- perl -Ilib script/<プロジェクト名>-server
Command 'carton' not found, but can be installed with:
sudo apt install carton
  • あれ?なんか前回と似たようなエラーだな
  • 現在の作業ディレクトリのシェル(ターミナル)で認識されていないことが原因かも

2-1:cartonをターミナルに認識させる

・まずシェルがcartonを認識されているか確認。何も表示されないなら認識していないという事
$ which carton

・cartonがインストールされている場所をシェルに認識させるために、シェルの設定ファイルにそのパスを追加
$ echo 'export PATH=$PATH:/home/hoge/perl5/bin' >> ~/.bashrc

・即座に反映させるためのコマンド実行
$ source ~/.bashrc

・cartonが認識されたか確認
$ which carton
/home/hoge/perl5/bin/carton ←こんな感じのパスが表示されればOK

2-2:再度サーバーを起動させてみる

$ carton exec -- perl -Ilib script/survey-server
Can't locate Carton/CLI.pm in @INC (you may need to install the Carton::CLI module)・・・
  • 少しエラーメッセージが変わったけど、エラーである事に変わりはない😢
  • Carton::CLI.pmというモジュールが@INCの中に見つからない
  • つまり必要なモジュールがインストールされていないというエラー

2-3:Carton::CLI.pmモジュールの手動インストール

$ cpanm Carton::CLI
!
! Can't write to /usr/local/share/perl/5.34.0 and /usr/local/bin: Installing modules to /home/hoge/perl5
! To turn off this warning, you have to do one of the following:
!   - run me as a root or with --sudo option (to install to /usr/local/share/perl/5.34.0 and /usr/local/bin)
!   - Configure local::lib in your existing shell to set PERL_MM_OPT etc.     
!   - Install local::lib by running the following commands
!
!         cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
!
Carton::CLI is up to date. (undef)
  • メッセージを読み解くと「ユーザーのローカル環境(~/perl5)にインストール」されたそうなので、これで大丈夫か❓

2-4:メッセージ中のコマンドとcartonのバージョン確認を行う

$ cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)

$ carton version
carton v1.0.35 ←バージョンが表示されればOK

2-5:サーバー起動してみる

$ carton exec -- perl -Ilib script/<プロジェクト名>-server
<プロジェクト名>: http://127.0.0.1:5000/
  • 無事上記URLで画面が表示されました😊

さいごに

あらためて、エラーがどこで起こったのか、どういうエラーだったのか、どうやって解決したのかについて、詳細にまとめてみました。
なにかご参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?