2015年2月25日水曜日

【トラブル】WPML 3.1.8.5にアップデート失敗して動作しない(解決策あり)


ということで多言語サイトが単一言語サイトになってしまっていたのでした。
WordPressではプラグインは自動更新するのが一般的なので、多くの人がひっかかっているんじゃないのかなぁと思います。私の場合には、2015年2月25日の午前1時頃に仕込んでいたプラグイン自動アップデートをしたときに問題発生していました。

原因


WPML 3.1.8.5のプラグインフォルダのミス
  • WPML 3.1.8.4以下: wp-content/plugins/sitepress-multilingual-cms
  • WPML 3.1.8.5: wp-content/plugins/sitepress-multilingual-cms-3.1.8.5
ということで、「sitepress-multilingual-cms」のはずが新しいプラグインを公開したときに、フォルダにバージョンナンバーをつけたままやっちゃったんだろうなぁと推測。


関連情報

解決方法

  1. wp-content→pluginsフォルダにある「sitepress-multilingual-cms-3.1.8.5」を「sitepress-multilingual-cms」に名前変更
  2. WordPressにログインして、WPMLプラグインを有効化する
ここで注意点は、フォルダ変更しなくてもWordPressにログインしてWPMLプラグインを有効化すると動いてしまう点。そのような対処方法をしてしまうと、次のアップデート時にまた停止して困ることになるので注意。

一括対処方法(WP-CLI利用 - 技術者編)

サイトが沢山あると、いちいちログインしてプラグインの有効化なんてやってられません。そこで便利なのがWP-CLIです。備忘録も兼ねてどのように処理したのか書き出してみました。作業の流れは下記の通り。
※技術者編と書いたとおり、コマンドラインによる操作やメンテに精通していることが前提です。コマンドはミスするとシステムを壊してしまう恐れがありますので、ご注意を!

※もしこれでサイトが見えなくなったら、ウェブサーバーシステム(Apache等)を再起動してみてください。手持ちの場合、下記を実施後白紙状態になったサイトがありました。ウェブサーバーシステム再起動で動作しましたけどね。
  1. WordPressのフォルダリストをテキストファイルに保存
  2. 保存したテキストファイルから、フォルダ名変更(mv)スクリプトを走らせる
  3. WP-CLIコマンドを利用し、一括でWPMLプラグインを有効化する
もちろん、その前にデータベースとファイルやフォルダのバックアップをしておいてくださいね(何かあっても自己責任ですので...)。

1. WordPressのフォルダリストをテキストファイルに保存


まぁ適当に。
とはいえ説明上、仮のフォルダを3つ用意する
/hogehoge/wordpress/hogege1/
/hogehoge/wordpress/hogege2/
/hogehoge/wordpress/hogege3/
これを「all_wordpress_folder_list」というテキストファイルに保存しておく。

2. 保存したテキストファイルから、フォルダ名変更(mv)スクリプトを走らせる


好みの問題だけど、私はawkが好きなのでそれを使う。大体のUNIX系システム(サーバーにログインできるなら)には入っているでしょう。

まずは、フォルダ名変更のコマンドを、「all_wordpress_WPML_folder_change.sh」に出力してみましょう。

cat all_wordpress_folder_list  | awk '{printf "mv %s/wp-content/plugins/sitepress-multilingual-cms-3.1.8.5 %s/wp-content/plugins/sitepress-multilingual-cms  ¥n", $1, $1} ' > all_wordpress_WPML_folder_change.sh

「all_wordpress_WPML_folder_change.sh」の中身は下記のようになっているはず。
(mv 移動前のフォルダ名  移動先のフォルダ名)
mv /hogehoge/wordpress/hogege1/wp-content/plugins/sitepress-multilingual-cms-3.1.8.5  /hogehoge/wordpress/hogege1/wp-content/plugins/sitepress-multilingual-cms
mv /hogehoge/wordpress/hogege2/wp-content/plugins/sitepress-multilingual-cms-3.1.8.5  /hogehoge/wordpress/hogege1/wp-content/plugins/sitepress-multilingual-cms
mv /hogehoge/wordpress/hogege3/wp-content/plugins/sitepress-multilingual-cms-3.1.8.5  /hogehoge/wordpress/hogege1/wp-content/plugins/sitepress-multilingual-cms

となっていると思います。
直接実行も出来ますが、一度作成した一括処理プログラムをテキストファイルに落としてチェックするのは重要なことだと思います。

問題なければ
  • sh -x  all_wordpress_WPML_folder_change.sh

をするか、
  • cat all_wordpress_folder_list  | awk '{printf "mv %s/wp-content/plugins/sitepress-multilingual-cms-3.1.8.5 %s/wp-content/plugins/sitepress-multilingual-cms  ¥n", $1, $1} ' | sh -x 

でフォルダ名の変更が完了します。
shのオプションである-xは、実際に実行されたコマンドを表示するものでデバッグに重要です。

3. WP-CLIコマンドを利用し、一括でWPMLプラグインを有効化する


cat all_wordpress_folder_list  | awk '{printf "cd %s  && wp plugin activate sitepress-multilingual-cms  ¥n", $1} ' > all_wordpress_WPML_activate-wp.sh

とこれまた「all_wordpress_WPML_activate-wp.sh」に実行するコマンドを出力して確認してみましょう。

「all_wordpress_WPML_activate-wp.sh」の中身は下記のようになっているはず。
cd /hogehoge/wordpress/hogege1/ && wp plugin activate sitepress-multilingual-cms
cd /hogehoge/wordpress/hogege2/ && wp plugin activate sitepress-multilingual-cms
cd /hogehoge/wordpress/hogege3/ && wp plugin activate sitepress-multilingual-cms

後は、
  • sh all_wordpress_WPML_activate-wp.sh
  • cat all_wordpress_folder_list  | awk '{printf "cd %s  && wp plugin activate sitepress-multilingual-cms  ¥n", $1} ' |sh
で一括有効化が可能です。


用語説明

  • && : 左のコマンドが成功したら、右のコマンドを実行する
  • ¥n:改行

2015年2月25日 @kimipooh

0 件のコメント:

コメントを投稿