レンタルサーバーの Mixhost に旧サーバーからMovableTypeを移行したときにいきなりPerlモジュールの不足とPerlのパスが原因でつまづいたので、今後のためにメモ。
事前準備したのにいきなりエラー
旧サーバーから書き出した MySQL のデータを PhpMyAdmin で Mixhost の MySQL に流し込み、MovableType の mtフォルダ も移行し、mt-config.cgi の内容も Mixhost の環境に合わせて書き換え、事前準備も整ったところでいざ管理画面にアクセス!と mt.cgi にアクセスしたみたらエラー…。
install_driver(my_sql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /home.....という内容からして MySQL のドライバーがないらしいです。
原因1:Perlモジュールの不足
MySQL のドライバというのは DBD::mysql という Perlモジュール のことみたいです。他のレンタルサーバーで Perlモジュール を求められたことないので気が付きませんでしたが、 Mixhost には標準ではインストールされてないみたいですね。高速なレスポンスを発揮するために不要な機能は入れてないのかもしれません。
Perlモジュールのインストール方法
MT に必要な Perlモジュール は Mixhost のコントールパネルである cPanel から簡単に入れることができます。 DBD::mysql を検索してインストールボタンを押すだけで簡単にインストールできました。
参考ページ
Perlモジュール を間違って入れたり、試しにいれてもアンインストールは簡単にできます。
MovableTypeに必要なPerlモジュールまとめ
DBD::mysql 以外に、既に標準でインストール済みや無くても大丈夫かもしれないませんが、いろいろな参考ページを元に必要かもしれないドライバ(Perlモジュール)をまとめておきます。
Movable Type を実行に必要
モジュール名 | 説明 |
---|---|
CGI | - |
Image::Size | - |
File::Spec | (バージョン0.8以上) |
CGI::Cookie | - |
LWP::UserAgent | - |
データベース モジュールとして必要
モジュール名 | 説明 |
---|---|
DBI | バージョン1.21以上 |
DBD::mysql | MySQLを使用する場合に必要 |
DBD::ODBC | バージョン1.25以上、Microsoft SQL Server を利用する場合 (Movable Type Advanced のみ対応) |
DBD::Oracle | バージョン1.25以上、Oracle Database を利用する場合(Movable Type Advanced のみ対応) |
(参考ページ)
オプション機能を利用する場合
モジュール名 | 説明 |
---|---|
Digest::SHA | パスワードのセキュリティを強固にする場合に必要です |
Plack | PSGI 環境下で mt.psgi を実行する場合に必要です |
CGI::PSGI | PSGI 環境下で mt.psgi を実行する場合に必要です |
CGI::Parse::PSGI | PSGI 環境下で mt.psgi を実行する場合に必要です |
XMLRPC::Transport::HTTP::Plack | PSGI 環境下で mt.psgi を実行する場合に必要です |
HTML::Entities | 特殊な文字をエンコードする場合に必要です |
HTML::Parser | トラックバック機能や更新通知機能を利用する場合に必要です |
SOAP::Lite (バージョン 0.5 以上) | XML-RPC による作業を行う場合に必要です |
File::Temp | ファイルのアップロードで上書きを行う場合に必要です |
Scalar::Util | 再構築キューを利用する場合に必要です |
List::Util | 再構築キューを利用する場合に必要です |
Image::Magick |
画像のサムネイルを作成したり、CAPTCHAを利用する場合に必要です ( または GD、Imager のいずれかの Perl モジュールか、NetPBMツール) |
IPC::Run | Movable Type のイメージドライバとして NetPBM を利用する場合に必要です |
Storable | 外部プラグインの利用の際に必要となる場合があります |
Crypt::DSA | コメント投稿時のサインインを高速化したい場合に必要です |
Crypt::SSLeay | AOL や Yahoo! などの SSL を利用する OpenID のコメント投稿者を認証する場合に必要です。または、Google Analytics を利用する場合に必要となります |
Cache::File | Yahoo! Japan によるコメント投稿者の OpenID 認証を許可する場合に必要です |
MIME::Base64 | コメントの認証機能を利用する場合やメール送信に SMTP を利用する場合に必要です |
XML::Atom | Atom API を利用する場合に必要です |
Cache::Memcached | Movable Type のキャッシング機能として memcached サーバーを利用する場合に必要です |
Archive::Tar | バックアップと復元で圧縮の機能を利用する場合に必要です |
IO::Compress::Gzip | バックアップと復元で圧縮の機能を利用する場合に必要です |
IO::Uncompress::Gunzip | バックアップと復元で圧縮の機能を利用する場合に必要です |
Archive::Zip | バックアップと復元で圧縮の機能を利用する場合に必要です |
XML::SAX | 復元の機能を利用する場合に必要です |
Digest::SHA1 | LiveJournal、OpenID でコメント投稿者を認証する場合に必要です |
Net::SMTP | メールの送信に SMTP を利用する場合に必要です |
Authen::SASL | CRAM-MD5、DIGEST-MD5 / LOGIN を SASL メカニズムとして利用する場合に必要です |
Net::SMTP::SSL | SMTP 認証に SSL を利用する場合に必要です (Movable Type 6.1.2 まで) |
Net::SMTP::TLS | SMTP 認証に STARTTLS コマンドを利用する場合に必要です (Movable Type 6.1.2 まで) |
IO::Socket::SSL | SMTP 認証に SSL / STARTTLS コマンドを利用する場合に必要です。または、Google Analytics を利用する場合に必要となります |
Net::SSLeay | - |
Safe | - |
Digest::MD5 | - |
Text::Balanced | ブログ内検索で必要 |
XML::Parser | - |
Time::HiRes | run-periodic-tasks を実行するために必要です。 |
Mozilla::CA | Google Analytics を利用する場合に必要になります。 |
XML::SAX::ExpatXS (または、XML::SAX::Expat) |
バックアップデータの復元に必要となります |
XML::LibXML::SAX | バックアップデータの復元に必要となります。 |
(参考ページ)
インストール済みかチェックする方法
MovableTypeの環境チェック用CGIである mt-check.cgi を実行することで、インストールされているかどうか確認できます。mt-check.cgi はMTを配置したルートフォルダにあります。
インストールしたのにエラー
必要な Perlモジュール をインストールして、再度 mt.cgi にアクセスしたら同じエラーが表示されました。 mt-check.cgi でインストールされていることは確認済みなのですが、ちゃんとインストールされていないかのかな?インストールの方法がまずいのかな?と思いつつ、何回かMySQLのモジュールのインストールを行いましたが、エラーは解消されませんでした。問題解決のためにいろいろ検索してしているとPerlのパスについての注意事項を見つけました。
原因2:Perlのパスを変更
MovableTypeのCGIファイルにあるPerlのパスを Mixhost に合わせて変更していないのが原因でした。 Mixhost のページに以下の記載がありました。
書き換え対象のファイル
MovableType のフォルダ直下に以下14個のCGIファイルがあります。これにある Perl のパスを書き換える必要があります。
- mt-atom.cgi
- mt-check.cgi
- mt-comments.cgi
- mt-cp.cgi
- mt-data-api.cgi
- mt-feed.cgi
- mt-search.cgi
- mt-sp.cgi
- mt-tb.cgi
- mt-testbg.cgi
- mt-upgrade.cgi
- mt-wizard.cgi
- mt-xmlrpc.cgi
- mt.cgi
パスを#!/usr/bin/perlml -wに変更する
例えば mt-atom.cgi の場合、このファイルを開くと先頭行にある Perl のパスを以下のように変更します。
#!/usr/bin/perl -w
↓に変更
#!/usr/bin/perlml -w
[ cPanel ]-[Perl モジュール]のページには以下の記述がありました。後から試してみたところ、赤枠の2行に変更するのでも大丈夫でした。
#!/usr/bin/perl -w use cPanelUserConfig;ほとんどの場合、先頭行は #!/usr/bin/perl となっているので、2行目に use cPanelUserConfig; を入れるだけです。 #!/usr/bin/perlml とどちらがいいかは好みとなります。
そしてアクセス成功!
14個のCGIファイルのパスを変更したらアップロードして、再度 mt.cgi にアクセスしたところ、無事ログイン画面が現れました。
レンタルサーバーの引っ越しは何度か行っていますが、簡単ではないですね…。