■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。
このフォーラムは閲覧専用のアーカイブです。

BaserCMSでのマイグレーションについて

s_eggplant > BaserCMSでのマイグレーションについて @ 2013/12/11 18:37
お世話になります。

動作環境
===
■ BaserCMSのバージョン:3
■ 開発環境: Mac OS X
■ スマートURLの利用: ON
■ 設置フォルダ: ドキュメントルート
■ 利用しているデータベース: MySQL
====

現在、テーブルにカラムを追加しようと考えております。その時に migration を導入しようと考え CakeDC Migrationを導入しました。プラグインのインストールは成功したのですが、一番最初の所で失敗しております。

質問としては 2点あります。

1. Console/cake Migrations.migration run all -p を実行した時のエラー(次記)

==
Notice Error: Array to string conversion in [/Users/nasu/Documents/workspace/05_PHP/futaba/lib/Baser/Model/Datasource/DboSource.php, line 472]

2013-12-11 18:17:25 Notice: Array to string conversion in [/Users/nasu/Documents/workspace/05_PHP/futaba/lib/Baser/Model/Datasource/DboSource.php, line 472]
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dispatchEvent' at line 1
==
の原因は分かりますでしょうか。

2. BaserCMS で migration で管理する時の運用方法、手順は特別にありますでしょうか。(こういう風にした方が良い、しています等)

以上です。長くなりましたが宜しくお願い致します。

ryuring > Re: BaserCMSでのマイグレーションについて @ 2013/12/11 19:51
こんばんは。

CakeDC Migration は利用した事がないのですが、内部的に、baserCMS も 内部的に CakeSchema を利用しています。
バージョン間の差分管理は独自実装となります。
基本的には、変更のあったテーブルのスキーマ情報のスナップショットをアップデート用のパッチとして利用します。
スナップショットの作成は、/admin/tools/write_schema で作成できます。

今回、フィールドの追加との事ですが、baserCMSのコアのテーブルにフィールドを追加するという事でよかったでしょうか?

また、エラーにて、dispatchEvent という名称が出てきていますが、こちらは、BcAppModelにて定義されている baserCMSの独自実装です。

おそらくこのメソッドがどこからか呼出されているが、CakeDC Migration が BcAppModelを継承していない為、Undefined Method となっていると思います。
CakePHPの仕組みとして、存在しないメソッドは、SQLとして発行される為、今回のエラーが発生していると。

もし、可能であれば、どこから呼出されているかを特定して頂けると、baserCMSコア側で、BcAppModelを継承していない場合の対応ができると思います。

ちゃんとした回答になっていないと思いますが、よろしくお願いします。

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

s_eggplant > Re: BaserCMSでのマイグレーションについて @ 2013/12/12 0:20
お世話になります。

回答 有り難うございました。インラインで回答させて頂きます

>今回、フィールドの追加との事ですが、baserCMSのコアのテーブルにフィールドを追加するという事でよかった>でしょうか?

はい、認識の通りとなります。

>また、エラーにて、dispatchEvent という名称が出てきていますが、こちらは、BcAppModelにて定義されている baserCMSの独自実装です。

なるほど。了解しました。

上記のヒントを元にプラグインのソースを修正しました。修正箇所は 二カ所となります。

1. app/Plugin/Migrations/Lib/MigrationVersion.php

//App::uses('ConnectionManager', 'Model'); ← 修正前
App::uses('ConnectionManager', 'BcAppModel');← 修正後

2. app/Plugin/Migrations/Model/SchemaMigration.php

class SchemaMigration extends BcAppModel{ ← 修正後
//class SchemaMigration extends Model { ← 修正前

1は検証していないのですが必要なかったかもしれません。

実行結果

Cake Migration Shell
---------------------------------------------------------------
Notice Error: Undefined offset: 0 in [****/app/Plugin/Migrations/Lib/MigrationVersion.php, line 352]

2013-12-11 23:55:42 Notice: Undefined offset: 0 in [****/app/Plugin/Migrations/Lib/MigrationVersion.php, line 352]
Notice Error: Undefined offset: 0 in [****/app/Plugin/Migrations/Lib/MigrationVersion.php, line 352]

2013-12-11 23:55:42 Notice: Undefined offset: 0 in [****/Plugin/Migrations/Lib/MigrationVersion.php, line 352]
No migrations available.

Notice Error は出ていますが 「No migrations available.」 というメッセージが出て正常に動作しました。



>CakeDC Migration は利用した事がないのですが、内部的に、baserCMS も 内部的に CakeSchema を利用しています。
>バージョン間の差分管理は独自実装となります。
>基本的には、変更のあったテーブルのスキーマ情報のスナップショットをアップデート用のパッチとして利用します。
>スナップショットの作成は、/admin/tools/write_schema で作成できます。

なるほど。有り難うございます。

一点だけ確認させて下さい。

手順としては DB にフィールドを追加 ⇒ /admin/tools/write_schema の手順で宜しいのでしょうか。

以上です。宜しくお願い致します。
ryuring > Re: BaserCMSでのマイグレーションについて @ 2013/12/25 1:24
こんばんは。返信が遅くなりました。

実際に Cake DC Migrations をインストールしてみると、ご指摘のとおりのエラーが発生しました。
今後、CakePHPのプラグインを利用する事も考えると BcAppModel を継承しないモデルを利用する際には、dispachEventを実行しないような処理が必要そうですね。

近々、対応したいと思います。

Undefined offset: 0 のエラーは、getVersionというメソッドが失敗しているようですね。
こちらは、Cake DC Migrations の利用方法・仕様がわからないとなんとも言えません。

> 手順としては DB にフィールドを追加 ⇒ /admin/tools/write_schema の手順で宜しいのでしょうか。

はい、大丈夫です。
上記URLをブラウザより実行すると、追加されたテーブルが一覧に表示されていると思いますので、
そのファイルをダウンロードして利用するという形になります。
ただ、Cake DC Migrationsが正常に利用できればこちらは利用する必要はないかもしれませんね。
通常は、baserCMSのコアのテーブルに変更があったり、プラグインを作成する際に利用しています。


Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

s_eggplant > Re: BaserCMSでのマイグレーションについて @ 2013/12/26 15:17
お世話になります。回答有り難うございます。

====
実際に Cake DC Migrations をインストールしてみると、ご指摘のとおりのエラーが発生しました。
今後、CakePHPのプラグインを利用する事も考えると BcAppModel を継承しないモデルを利用する際には、dispachEventを実行しないような処理が必要そうですね。

近々、対応したいと思います。
============

有り難うございます。

===
Undefined offset: 0 のエラーは、getVersionというメソッドが失敗
===

については

select * from products_plugins;

をみると

Migrations の version カラムが 入ってないからの様です。試しに値を入れると Notice のエラーは出なくなります。


以上です。ご丁寧に 有り難うございました。