lolipopのスタンダードプランのアップデートしました。
(ディスク容量: 120GB → 150GB、ストレージ: HDD → SSD)
アップデートが完了した旨のメールを受診し、movabletype(MT7-R4605)にアクセスした所、動かなくなりました。
下記のようなメッセージがでます。(最初の部分のみ)
エラーが発生しました: install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /home/users/2/lolipop.jp-dp_ _ _ /web/_ _ _/MT7-R4605/plugins/spamlookup/lib /home/users/2/lolipop.jp-dp_ _ _/web/_ _ _/MT7-R4605/plugins/WidgetManager/lib /home/users/2/lolipop.jp-dp_ _ _/web/sayamahills/MT7-R4605/plugins/...
このアップデートでは、下記が変更になったとのことです。
・現在の共有SSLのアドレスは利用できなくなり、ロリポップ!ドメインがSSL化されました。
・PHP7.3および7.4のみ利用できます。PHP7.1は利用できません。
・Perlのバージョンが5.30へ変わりました。また「/usr/bin/perl」のパスが利用できません。
・Rubyのバージョンが2.6へ変わりました。
・Pythonのバージョンが3.7へ変わりました。
どなたか、アドバイスお願いします。
大瀧雅寛(当方、専門外のMTユーザーです)
素人なりに考えたのですが、Perlのパスが問題のようです。今までの「/usr/bin/perl」を、新しく「/usr/local/bin/perl」にしないといけないとのこと。mt-configを、どのように変えたらいいのでしょうか?
自己解決しました。全てのcgiファイルの1行目を下記に書き換えました。
#!/usr/local/bin/perl -w
横から割り込み、失礼いたします。
私もlolipopのスタンダードプランをアップデートしたため、
MTフォルダ内のファイルで、「/usr/bin/perl」という表記を、
すべて、「/usr/local/bin/perl」に変更したのですが、
再構築しようとすると、ログに以下の様なエラーが表示されます。
公開中にエラーが発生しました: パス('/home/sites/lolipop.jp/users/ciao.jp-aprilsnow/web/blog/archives/films')を作成できません: mkdir /home/sites/lolipop.jp/users: Permission denied at lib/MT/FileMgr/Local.pm line 157.
ちなみに、拡張子が「cgi」以外にも、「pm」や「pod」とあるファイル内のパスも、
「/usr/bin/perl」から、「/usr/local/bin/perl」に変更済です。
Movable Typeのバージョンは、7.0.1です。
どなたか、お気づきの点がありましたら、ご教示いただけないでしょうか?
どうぞ、よろしくお願いいたします。
同様の件で500エラーが発生し、早く対処せねばと慌てた結果、別の動いているCGIを徹夜で作り直すというとてつもなく面倒なことをした後ですが、解決策がみつかったので。
ちなみに、ロリポップサポートに何度も連絡しましたがこの件の情報は一切ありませんでした。
Perl5.22以降では、 defined(@array) および defined(%hash) は致命的なエラーになりました…という記述を発見。
https://www.adam.ne.jp/support/troubleshooting/web02/
■jcode.plファイルの修正
----------------------------------------------------------------------------------
この仕様変更によりPerlライブラリ jcode.pl はエラーを発生します。
jcode.pl の682行目辺りのコードを次のように修正することでエラーを回避することができます。
修正前
sub z2h_euc {
local(*s, $n) = @_;
&init_z2h_euc unless defined %z2h_euc;
$s =~ s/($re_euc_c|$re_euc_kana)/
$z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1
/geo;
$n;
}
sub z2h_sjis {
local(*s, $n) = @_;
&init_z2h_sjis unless defined %z2h_sjis;
$s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo;
$n;
}
修正後
sub z2h_euc {
local(*s, $n) = @_;
&init_z2h_euc unless %z2h_euc;
$s =~ s/($re_euc_c|$re_euc_kana)/
$z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1
/geo;
$n;
}
sub z2h_sjis {
local(*s, $n) = @_;
&init_z2h_sjis unless %z2h_sjis;
$s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo;
$n;
}
----------------------------------------------------------------------------------
これだけでは解決できず、続きに
■本体cgiファイルの修正
----------------------------------------------------------------------------------
Perl5.26以降では、外部ファイルを読み込む際の検索パス(@INC)からカレントディレクトリ(.)が削除されました。
この仕様変更によりカレントディレクトリのライブラリやモジュールが読み込めなくなる場合があります。
スクリプトの先頭に次の2行を追加することで、検索パスにカレントディレクトリを含めることができます。
#!/usr/local/bin/perl
use FindBin;
use lib $FindBin::Bin;
----------------------------------------------------------------------------------
意味は全くわかりませんがこれで動くようになりました。また…
以下の記載も発見。
http://maru.cocolog-nifty.com/manabi/2006/07/jcodepl_utf8_021f.html
-----------------------------------------------------------------------
使用例
here's some.
jcode.plからの移行
1."require 'jcode.pl';" となっている箇所をすべて "use Jcode;"に
2."jcode::" となっている箇所を "Jcode::"に
ほとんどの場合、これで十分なはずです。
-----------------------------------------------------------------------
しかしこれだけでは不十分で…
jcode' → Jcode' ※「j」が大文字の「J」
いずれも必要ファイル内を全置換します。
ちなみにロリポップでは「jcode.pl」ファイルは不要で可動確認済みです。
自分はとても慌てたので誰かの役に立てればいいなと。
上記を参考にしても、症状は改善されませんでした。
他に対処案等がありましたら、引き続き、ご教示いただけると幸いです。
どうぞ、よろしくお願いいたします。