以前は、サイトでの作業中に、ローカルサーバー上のファイルとデータベースに必要な変更を加え、すべてが正しく機能するかどうかを確認してから、ftpクライアントとphpMyAdminを使用して、ファイルとデータベースの変更を作業サイトにコピーしました。 どのファイルをルールするか覚えていない場合、通常はそれが起こりますが、すべてをコピーしました。
現在のプロジェクトでは、作業はローカルサーバーで行われ、編集内容はテストサーバーに転送されてから、作業サーバーにのみ転送されます。 さらに、顧客は自分で最後のアクションを実行できる必要があります。 Joomlaにはこのためのソリューションがあります-拡張機能のインストールファイルに加えて、パッケージ内のすべての拡張機能のパッケージ化。 したがって、顧客は1つのアクションを実行するだけですべての拡張機能を更新できます。 しかし、開発者は何をすべきでしょうか? コンポーネントについては、コピーする必要があります:管理部分と正面部分、メディアディレクトリからのフォルダー(以前は言語ファイルもコピーする必要がありましたが、配置に新しい標準を使用すると、これから解放されます)。 次に、マニフェストファイルを管理フォルダーからルートに移動し、すべてをアーカイブする必要があります。 アーカイブの名前にバージョン番号を示すことも望ましいです。 すべての拡張機能がコンパイルされたら、それらすべてとパッケージマニフェストファイルを1つのアーカイブにパックします。 複雑なことは何もないようですが、これまでのところ多くの拡張機能はありません。 そして、ダースが多い場合(私の場合は21で、その数は増えています)? しかし、時々、すぐに変更を行い、更新されたパッケージを転送する必要がある場合はどうでしょうか?
ここで、自動アセンブリの問題に戸惑いました。 当時、私はAntについてしか知りませんでした。 その機能の調査を開始し、Mavenについてさらに学びました。 しかし、利用可能な機能が急に不足すると、Javaで記述しなければならなくなるのではないかと混乱しました。 そこで検索を続けて、PHPのプロジェクトビルダーであるPhingを見つけました。 その機能に慣れてきたため、必要なものがすべて揃っていることにすぐに気付きました。
- ファイルとディレクトリの操作。
- アーカイブを操作します。
- xmlファイルからプロパティを読み取ります(マニフェストのデータを使用できます)。
- バージョン管理システム(cvs、svn、git)を操作するための操作;
- ftpおよびhttpプロトコルのサポート。
- 外部コマンドの実行。
- PHPコードの実行。
- 単体テストを起動します。
- データベースを操作します。
- PHPの既製または自家製のプラグインで拡張される他の多くの機能。
Phingのインストール
Phingをインストールする最も簡単な方法は、PEARを使用することです。 これを行うには、コンソールで次の2つのコマンドを入力します。
pear channel-discover pear.phing.info pear install phing/phing
PEARを使用しない場合は、公式WebサイトにPhingを手動でインストールする方法に関する指示があります。
NetBeansに接続する
インストール後の次のステップは、IDEに接続することです。 NetBeansを使用します。IDEからタスクを実行するphingKingプラグインがあります。 バージョン7.3以降では、プラグインマネージャーから直接インストールできます。 以前のバージョンでは、プラグインを事前にダウンロードして、ファイルからインストールする必要があります。
インストール後、WindowsメニューセクションにPhing Targets項目が表示されます。 このウィンドウには、Phingタスクが表示されます。
- お気に入り-選択したタスク。
- サブターゲット-サブタスク(実装がより一般的なタスクに含まれるタスク);
- デフォルトのターゲット-デフォルトのタスク。
PHPセクションのNetBeans設定に、PhingKingタブが表示されます。このタブで、Phingへのパスを指定する必要があります。 対応するセクションのプロジェクトプロパティで、タスクを含むxmlファイルへのパスを指定する必要があります(これについては以下で詳しく説明します)。
コマンドラインの使用
コマンドラインからPhingを使用するのも簡単です。 build.xmlファイルにタスクを配置し、同じディレクトリでPhingスクリプトを実行するか、-buildfileパラメーターでxmlファイルへのパスを指定します。 phing -helpを実行すると、パラメーターの完全なセットを取得できます。
タスク作成
Phingのタスクは、xmlファイル(デフォルトではbuild.xml)に書き込まれます。 デフォルトでは、プロジェクトプロパティでデフォルトとして指定された1つのタスクのみが開始されますが、その中の他のタスクへの依存関係を指定できます。 プロジェクト全体がプロジェクトタグにあり、各タスクがターゲットタグにあります。
最も単純なタスクファイルは次のようになります。
<?xml version="1.0" encoding="UTF-8"?> <project name="test" default="build"> <target name="task1"> <echo msg="Task 1" /> </target> <target name="task2"> <echo msg="Task 2" /> </target> <target name="build" depends="task1, task2"> <echo msg="Build" /> </target> </project>
結果が表示されます:
タスク1
タスク2
構築する
ビルド拡張機能Joomla
それでは、Phingで何か便利なことをしましょう。Joomlaの拡張機能を備えたパッケージを作成しましょう。
ベースライン:
- 開発はディレクトリ/ opt / lampp / htdocs / mysiteの下にあります
- 完成したパッケージを/ home / user1 / mysiteに入れます
- / home / user1 / mysite / srcの拡張ソースファイル
- バージョン番号が/ home / user1 / mysite / zipの拡張機能インストールファイル
- / home / user1 / mysite / cacheにバージョン番号のない拡張機能インストールファイル
注:バージョン番号付きのファイルは、スタンドアロンファイルとして便利に使用され、パッケージアセンブリを簡素化するために番号なしで使用されます。
<project name="make_project" default="build"> <!-- , --> <property name="src_dir" value="/opt/lampp/htdocs/mysite" /> <property name="res_dir" value="/home/user1/mysite" /> <target name="clear"> <echo>============= =============</echo> <!-- delete fileset --> <delete includeemptydirs="true"> <!-- ${res_dir} res_dir --> <fileset dir="${res_dir}"> <!-- / --> <include name="**"/> </fileset> </delete> </target> <target name="com_test"> <echo>============= Test =============</echo> <!-- xml-. . --> <xmlproperty file="${src_dir}/administrator/components/com_test/test.xml" prefix="com_test." keepRoot="false" /> <!-- → <!-- --> <copy todir="${res_dir}/src/com_test/site" overwrite="true"> <fileset dir="${src_dir}/components/com_test"> <include name="**" /> </fileset> </copy> <!-- --> <copy todir="${res_dir}/src/com_test/admin" overwrite="true"> <fileset dir="${src_dir}/administrator/components/com_test"> <!-- , --> <exclude name="${src_dir}/administrator/test.xml" /> </fileset> </copy> <!-- --> <copy file="${src_dir}/administrator/components/com_test/test.xml" tofile="${res_dir}/src/com_test/test.xml" overwrite="true"/> <!-- media --> <copy todir="${res_dir}/src/com_test/media" overwrite="true"> <fileset dir="${src_dir}/media/com_test"> <include name="**" /> </fileset> </copy> <!-- --> <zip destfile="${res_dir}/cache/com_test.zip" basedir="${res_dir}/src/com_test"/> <!-- . xml- --> <copy file="${res_dir}/cache/com_test.zip" tofile="${res_dir}/zip/com_test-${com_test.version}.zip" overwrite="true"/> </target> <!-- . --> <target name="mod_test"> <echo>============= Test =============</echo> <xmlproperty file="${src_dir}/modules/mod_test/mod_test .xml" prefix="mod_test." keepRoot="false"/> <copy todir="${res_dir}/src/mod_test" overwrite="true"> <fileset dir="${src_dir}/modules/mod_test"> <include name="**" /> </fileset> </copy> <zip destfile="${res_dir}/cache/mod_test.zip" basedir="${res_dir}/src/mod_test"/> <copy file="${res_dir}/cache/mod_test .zip" tofile="${res_dir}/zip/mod_test-${mod_calendar.version}.zip" overwrite="true"/> </target> <target name="build" depends="clear, com_test, mod_test"> <echo>============= =============</echo> <!-- build/pkg_test.xml — --> <xmlproperty file="${src_dir}/build/pkg_test.xml" prefix="pkg." keepRoot="false" /> <copy file="${src_dir}/build/pkg_test.xml" tofile="${res_dir}/cache/pkg_test.xml" overwrite="true"/> <zip destfile="${res_dir}/pkg_test-${pkg.version}.zip" basedir="${res_dir}/cache"/> </target> </project>
一見、少し威圧的に見えますが、実際には複雑なことは何もありません。 ほとんどの拡張機能では、わずかな変更を加えるだけでコードをコピーできます。 はい、編集することは非常にまれです。 しかし、ワンクリックで、開発されたすべての拡張機能の最新バージョンを含むパッケージを取得できます。
各アセンブリのバージョン番号を自動的に増やすことでプロセスをさらに改善できますが、バージョン番号とデータベース移行ファイルの名前を一致させるためにこれを行いませんでした。 誰かがこれについて考えているなら、コメントに書いてください。