FedoraにおいてPerlを勉強してみる

CPANについて

Perl において、既にある他の開発者が作ったモジュールを取得・利用する機構としてCPANというものが使われている。
CPANを使えば、他の開発者が作成した現状自分でもっていない機能などを追加することができる。

ただし、CPANで取得したモジュールと、パッケージの依存関係を管理するため、
CPANで取得管理するのではなく *cpan2rpm* を使ってcpanで取得するモジュールをパッケージにして追加できる。

Perl の CPAN モジュールを自動で RPM に変換する

エラー発生時のケーススタディ

cpan2rpm の利用方法について 各環境にもよるが それ通りに行かなかった点について

"%_gpg_name"でエラー発生

エラー: マクロファイル内で "%_gpg_name" を設定しなければなりません。
パスフレーズのチェックに失敗しました。

��3669 cpan2rpmでGeo::IPfree - Web Patio - Fedoraで自宅サーバー構築

上記のエラーが発生した場合には、cpan2rpm パラメータとして 「--no-sign」を付けて実行してみる

module導入時に試験エラーの発生

根本的な解決方法ではないかもしれないが、cpan2rpm パラメータとして 「--make-no-test」を付けて実行してみる

cpan2rpm 利用時に発生するパッケージ依存

module インストール時に 以下のエラー文言が発生した場合には、そもそも rpm-buildパッケージが欠如しているおそれがあります。

>エラー: 依存性の欠如:
> rpm-build は cpan2rpm-2.027-1.noarch に必要とされています

��598 Perlモジュールパッケージ管理システム導入 - Web Patio - CentOSで自宅サーバー構築

そのため、
Fedoraインストール時のRPMパッケージインストール単位である「パッケージグループ」でRPMパッケージをインストールする

$ yum grouplist
$ yum -y groupinstall "開発ツール" 

依存関係の解決

ひつじ帳

感想

fedoraCPANを利用するためには、様々な手段がある*1が結局は依存関係(パッケージとの依存関係?)を気にするよりは
、導入のしやすさや更新のしやすさを考えると、CPANから直接操作した方がはやいのではという意見。

ただし、モジュールをいろいろといれる場合には、依存関係が壊れた時が大変らしい。

皆さんが採用している CPAN の適切な管理方法を教えてください。… - 人力検索はてな

うーん。いろいろと、めんどくさい。

*1:いろいろありすぎる感

設定

最終的に、今ままでのschema.ymlからテーブルつくって、モデルつくってのながれまでを一発で実行してくれるコマンドがこれ

symfony doctrine:build --all --and-load

モデルをもとに、モジュールを作成することはできるらしい。

ymfony doctrine:generate-module --with-show --non-verbose-templates frontend job JobeetJob

注意事項

lib/vender/以下にsymfonyのサイトからcheckoutしたソースを配置していた場合に、
autoloadがインデックスを作成する際に、同ファイル名のBaseDocrinteForm.classが存在したため、上記コマンドを実行する際に、BaseDocrinteForm not Foundが発生していた。。。

初期データの設定

以下のYAML内に、初期データあるいは、テスト用のデータを記述しておくことによって、どんなときでも、決まったデータをDBに登録することができる。

data/fixtures/categories.yml
data/fixtures/jobs.yml

データロード YAMLに設定した情報がDBに追加される。

symfony doctrine:data-load

4. データベース

まず、データベースの設定をします。

DBが未設定だったらまず確認する。
http://fedorasrv.com/mysql.shtml

先に、databaseを作成しておく。

mysqladmin -uroot -p create jobeet

生成されたSQLを使って、データベースにテーブルを作成する。

symfony doctrine:insert-sql

3. スキーマ

 

ORM(Object-relational mapping) オブジェクト関係マッピング

オブジェクト関係マッピングとは、データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法である。

ORM - Wikipedia

モデルの生成

データベースを扱うモデルオブジェクトを生成させる。

symfony doctrine:build --model

SQLの生成

symfony doctrine:build --sql

その他:セキュリティについて

ウェブアプリケーションを作成する上で知って置かなければいけないセキュリティ対策を学習する。

XSS攻撃

入力したデータ(フォーム入力など)を適切にエスケープしないままHTML中に出力することにより、入力中に存在するタグ等文字がそのままHTMLとして解釈される。ここでスクリプトを起動させる。

クロスサイトスクリプティング - Wikipedia

CSRF 攻撃

掲示板に意図しない書き込みをさせられたり、オンラインショップで買い物をさせられたりするなどの被害が起こる。また、設定用ウェブページを通して、ルーター無線LAN等のあらゆる情報機器の設定の、意図しない変更をされる可能性もある。

クロスサイトリクエストフォージェリ - Wikipedia