カテゴリー
movabletype(mt) Perl

MT7に独自のコンテンツフィールドを追加する

この記事は「Movable Type Advent Calendar 2017」の12日目の記事です。 MovableTypeは2017年の10月に行われたMTDDCで、時期バージョンとなるMovable Type 7を4月にリリースすると発表がありました。 イベントに出席された方は知っているかもしれませんが、今回大きく変わる部分が、コンテンツタイプという概念です。 コンテンツタイプとは簡単にいうと、作成するページに応じて項目の数や種類などが設定でき、コンテンツに応じた管理画面にできるということです。 WordPressを使うよって人はカスタム投稿タイプを作って、カスタム投稿タイプにカスタムフィールドを作成して関連づけるということをしていると思いますが、それに近いイメージではないかなと思います。 今までは記事、もしくはウェブページという2つのコンテンツタイプしか存在せず、そこにカスタムフィールドをつけたり、ブログを複数に分けたりという対応をせざるを得ないというのがMTを使う上でのお決まりでしたが、その必要も無くなります。 今までのMTで商品紹介ページを作る場合、商品が多くなってくるとカテゴリ分けをしたくなります。「パソコン」だったり「周辺機器」だったり。 パソコンの中でもさらに種別をつけたくて「Mac」「Windows」 「Mac」の中でも「iMac」「Mac Book」 「iMac」の中でディスプレイサイズ、年式などなど。。。 分ければ分けるだけ、検索などでも探しやすくなったりはしますが、管理画面が複雑になっていきます。「パソコン」でブログを作ってその中でカテゴリを作って。。。 カテゴリはブログで1つしか使えないから、トップカテゴリを大項目、2階層目が中項目、その下が小項目。。。 タグはスペックを分けるのに使いましょう。16Gや32bitなどなど。。。 試行錯誤してできた管理画面にもブログや記事などの言葉が出てきて下記のようなマニュアルを作ってみたり。。。

これまでのたくさんの工夫と努力をしてきましたが、それが簡単にできるようです。 標準のコンテンツタイプとコンテンツフィールドでできることが増えたので、ほとんどの場合、このままでもコンテンツが作成できるかと思いますが もし自分で増やせるとしたらどうでしょう? 増やしてみたくなりますよね!(エンジニアのみなさん時間です まだコンテンツタイプの公式なプラグインの作り方などドキュメントはないので、少しだけソースを読んでみましょう。 registryの中に新たに「content_field_types」というものがあるようです。 lib/MT/ContentFieldType.pmの中になにやら色々と標準のコンテンツフィールドが定義されており、その中でlabelやdata_type、orderなどがあります。
  • label フィールド一覧に表示される名前?
  • data_type 保存するデータのタイプ?「integer」や「varchar」
  • order 表示される順番?
  • field_html 管理画面で表示されるHTML?
  • field_html_params 管理画面で表示されるHTMLに渡すパラメータ?
  • options コンテンツフィールドのオプション?。例えば数字だとMAX値とかMIN値とか。入力に何か制限かけたい時や、フィールド毎に設定をもたせたい場合に使う?
  • options_html 上記オプションを設定させるときに表示するHTMLの設定?
こんな感じで色々なことができるみたいです。 ここで書いたものはあくまでアルファバージョンのソースコードを読み解いた結果なので、リリースまであと4ヶ月くらいで全然別物になっていることもあるかもしれませんが、少なくとも項目を自由に増やしたり、増やし方も自由度が高くて開発できる人さえいれば、かなり柔軟な管理画面が作れそうです。 これまでもコールバックやプラグインなどの仕組みを使うと、全く別のCMSを作ることだってできるのですが、今回追加されているコンテンツタイプやコンテンツフィールドという仕組みにも、こうした細かく追加できるように作られているようです。 ここで、何か簡単なプラグインを作ってみる予定、、、でしたが、ちょっと時間不足でした。 時間を作れるタイミングで何か作ります。  
カテゴリー
movabletype(mt) Perl

MTでアップグレードが終わらない時にはコマンドから実行しよう

MovableType(MT)のアップグレード

毎回毎回お久しぶりの記事になってしまいます。。。

さて、今回はある案件でMTのバージョンを上げる、つまりはアップグレードするという案件がありました。

通常MTのバージョンアップは簡単です。

  1. 最新バージョンのファイルをFTPやSFTPでサーバーにアップロードする
  2. 管理画面にアクセスするとアップグレードを促される
  3. ログインしてアップグレードが始まる
  4. 終わったらアップグレード後のMTが使える

このアップグレードはデータが少ない環境であれば、ほんの数秒で終わります。

ただし、データ量、環境によってはアップグレードにものすごく時間がかかります。

MTのアップグレードはあまりに時間が長くかかってしまうと、たいていのサーバーでタイムアウトの処理が走り、アップグレード自体の処理も途中で止まってしまいます。

サーバー自体の設定をいじっても、何時間もかかってしまうような処理だと今度はデータベースでトラブルが起きたりと、トラブルのオンパレードに見舞われてしまいました。

もうあんな思いはしたくない!!

MTアップグレードはコマンド実行で簡単に

ある方のアドバイスにより、便利なコマンドツールがあるよ!ということで試してみました。

なんと、アップグレードをウェブから画面で行うのではなく、コマンドを実行するだけで完了するという便利なツールです。

使い方は簡単!mtがインストールされているディレクトリのtools/upgradeを起動するだけ

# cd dir_to_mt
#perl tools/upgrade --name=admin

そのままでは実行できないので必要なオプションを指定します。

  • –name アップグレードを実行するユーザを指定します
  • –sql アップグレードを実行した時にデータベースに投げられるSQLを表示させる(このオプションを指定するとdryrunも指定したことになるので、アップグレード処理は実行されません)
  • –dryrun アップグレード処理は実行せず、実行した際のログだけ表示する

ここでMTをプラグインなどでカスタマイズしている人は、外部モジュールなどを使っている場合、モジュールにパスが通っておらず、エラーになってしまう場合があります。

upgradeシェルは中身を見てもらうとわかるのですが、perlでできています。(コマンド打つ時もperlって打ってるしね)

なので、実行時にモジュールを指定してあげることで解決できます。

 # perl -I "modules/ex"  tools/upgrade --name=admin

このコマンドを実行して後は待つだけ。

ブラウザとにらめっこしながら、タイムアウトになったらどうしようなんて心配もいらない。

幸せなアップグレード、幸せなMovableTypeライフを!

カテゴリー
movabletype(mt) MySQL Perl データベース

MySQL server has gone away エラー対処方法

ある日突然エラーログにて

「MySQL server has gone away」という表示が出てきました。

直訳すると、MySQLサーバが立ち去りました。

おーい!勝手にどっかに立ち去らないでいただけますか〜!?

それにしても面白いメッセージ。考えた人センスあるね。

このエラーが出た時の状況としては、画像をbase64にしてHTML内に入れているソースをMovableTypeの記事のHTMLにぶっ込んで、

ローカル環境で保存したところ、ログにエラーが表示されました。

Perl的にも困るよね。勝手にどっか行かれたら。

大きなデータを任せた結果、逃げてったのかな。

さて、どこに行ったのかな?とエラーメッセージで調べると、ありました。

MySQL サーバーが存在しなくなりました

こっちは存在しなくなりましたって書いてある。対処法は「max_allowed_packet」を大きめにしようというものでした。

初期値は、、、1M。画像のデータとか入っているから2Mは超えている。16Mが最大らしいので、とりあえず最大に設定して再起動!

MovableTypeに戻って保存。うまくいきました。

エラーメッセージってもう少しなんとかならないもんかなぁ。

増子良太は立ち去りました!