PowerCMS™

PowerCMS ブログ

ホーム > PowerCMS ブログ

PowerCMS には様々な機能があり中にはログイン/ログアウトが行えるものがあります。運用を継続しているとログアウト操作に時間がかかるようになる場合があり、今回はその対策を紹介いたします。

ログイン/ログアウトの操作が行える機能が対象になりますので、PowerCMS 管理画面だけでなく会員サイト、コミュニティ掲示板、コメント機能にも当てはまります。

今回取り上げるケースの環境は下記の特長があります。

  • 運用を開始した頃と比べてログアウト操作にかかる時間が長くなった
  • ログイン操作とログアウト操作を比べるとログアウト操作だけ目立って時間がかかる
  • サーバの負荷が高くない状況でもログアウトには時間がかかる
  • run-periodic-tasks スクリプトを定期的に実行していない (管理画面が対象の場合)

時間についてはしきい値も特にありませんので感覚から判断ください。

原因

データベース内にログインセッションが大量に存在することが原因です。

PowerCMS の各機能でユーザがログインを行うとデータベース内にセッションデータが作成され、ログアウトを行うとセッションデータが削除されます。しかし、ブラウザを閉じるなどログアウトの操作を行わないとセッションデータは削除されずに残ります。それが年月とともに積み重なり大量になるとログアウトに時間がかかるようになります。

対策

大量に存在するログインセッションを削除することで改善します。ただ削除するだけではログイン中のユーザにも支障がありますが、古くなったログインセッションのみ削除することができアクティブユーザへの影響を抑えられます。

PowerCMS 管理画面と管理画面以外では対策の方法 (スクリプト) が異なるためわけて説明しますが、古くなったログインセッションを削除するという対策であることにかわりません。

run-periodic-tasks スクリプトを実行する (管理画面への対策)

cron やタスクスケジューラを利用して run-periodic-tasks スクリプトを定期的に実行してください。

# cd $MT_HOME
# sudo -u apache perl tools/run-periodic-tasks

※ $MT_HOME は PowerCMS のインストール先を指します。環境にあわせて置き換えてください。

run-periodic-tasks スクリプトを設定する環境の多くは記事・ウェブページを日時指定で公開・非公開を行うことを目的にされると思いますが、今回のように不要なデータの削除を行うような処理もあります。 run-periodic-tasks スクリプトは利用機能に限らずどの環境でも設定されることをおすすめいたします。

run-periodic-tasks スクリプトの実行時の注意点については以前の記事「バックグラウンド処理の実行と設定」も参照ください。

remove_old_sessions スクリプトを実行する (管理画面と管理画面以外への対策)

# cd $MT_HOME
# sudo -u apache perl tools/remove_old_sessions --ttl=1 --kind=US,SI
We are going to remove the following records:
        SI: 9433
        US: 1439
Proceed? [n]:

※ $MT_HOME は PowerCMS のインストール先を指します。環境にあわせて置き換えてください。

remove_old_sessions スクリプトは引数 ttlkind に応じたセッションデータを削除します。 上記の実行例は 1 日以上経過した USSI セッションデータが削除対象になります。

先に紹介しました run-periodic-tasks スクリプトを実行した場合には --ttl=1 --kind=US を指定した場合に近い内容の削除を行います。

remove_old_sessions スクリプトを定期実行する場合の注意

remove_old_sessions スクリプトは対話型であるため run-periodic-tasks スクリプトと同様に設定されますと動きません。

例えば下記のように実行しますとスクリプトとの対話の際に自動応答ができるので、remove_old_sessions スクリプトが即時実行される結果となります。

# cd $MT_HOME
# echo yes | sudo -u apache perl tools/remove_old_sessions --ttl=1 --kind=US,SI
We are going to remove the following records:
        SI: 9433
        US: 1439
Proceed? [n]: Success!

※ $MT_HOME は PowerCMS のインストール先を指します。環境にあわせて置き換えてください。

カテゴリー
PowerCMS 2PowerCMS 3PowerCMS 4PowerCMS 5サポートトラブルシューティング

PowerCMS の記事やウェブページの新規作成、編集画面に、「Failed to load content css ...」から始まるエラーメッセージが表示されることがあります。
一体何なのか?と驚かれる方もいらっしゃるかもしれません。
その原因と解決方法についてご説明します。

該当のエラーメッセージ

エラーメッセージ「Failed to load content css」

Failed to load content css: http://example.com/powercms/addons/PowerCMS.pack/tiny_mce/css/editor_style.css

※http://example.com/powercms/ は スタティックディレクトリの URL を指します。
「スタティックディレクトリ」については下記をご覧ください。
https://www.powercms.jp/products/document/installation/linux.html

原因

エディタ領域用の CSS ファイルが正しく読み込まれていない為です。

解決方法

[該当のウェブサイトのダッシュボード]-[設定]-[PowerCMS] 画面内にある「TinyMCE 設定」のコンテンツCSSファイルに対して、下記いずれかの修正を行います。

PowerCMS「TinyMCE 設定」画面

スタティックディレクトリ内の別のパスにファイルが存在する場合
URL を正しいものに変更します。
スタティックディレクトリ内の別のパスにもファイルが存在しない場合、もしくは設定が不要の場合
設定を削除します。

なお、上記で解決しない場合は、[該当のウェブサイトのダッシュボード]-[設定]-[投稿] 画面内にある「WYSIWYGエディタの設定」のコンテンツCSSファイルのURLも、上記と同様に確認、修正を行ってください。

管理画面内でのエラーですが、表示されないに越したことはありません。
「記事やウェブページの新規作成、編集画面に、エラーメッセージが表示されていないか」をチェック項目に入れておくと良いでしょう。

カテゴリー
PowerCMS 5サポートトラブルシューティング

PowerCMS では記事やウェブページ、カテゴリやフォルダ等のオブジェクトをグループ化する機能があり表示順等を管理することができます。

今回は PowerCMS 5 の管理画面カスタマイズ機能を利用してグループ編集画面に簡易的なフィルタができる「検索窓」を設置する方法を紹介させて頂きます。

実装イメージ

グループ編集画面の左カラム(選択可能なアイテムの一覧)の上部にフィルタ用の検索窓を追加します。

グループ編集画面の記事一覧側に検索窓を追加しフィルタリングを可能にする

※ 右カラムは選択済みのアイテムの選択状態や並び順に影響するため検索窓は設置しません。
※ 検索対象は飽くまで画面上に表示されている文字列のみです。

実装手順

システム管理画面の左メニュー「設定」→「PowerCMS」で設定画面へ遷移します。
「管理画面マルチデバイス設定」の「カスタマイズ」欄に下記を入力します。


<script>
jQuery(function($){
    $('.listing#item-left').each(function(){
        var $block   = $(this);
        var $header  = $block.find('.object-listing-header,.entry-listing-header');
        var $content = $block.find('.object-listing-content,.entry-listing-content');
        var $uls     = $content.find('ul');
        
        $uls.each(function(){
            var $ul_temp = $('<ul>').hide().appendTo('body');
            $(this).data('$ul_temp',$ul_temp);
        });
        
        var $wrap = $('<div>')
            .addClass('object-search-label')
            .css({
                'padding': '0px 9px 9px 9px',
                'background': '#f4f4f4'
            })
            .appendTo($header);
        
        var $search = $('<input>')
            .attr({
                'type': 'text',
                'placeholder': '検索'
            })
            .addClass('text full')
            .appendTo($wrap)
            .on('keyup',function(){
                var val = this.value;
                
                $uls.each(function(){
                    var $ul = $(this);
                    var $ul_temp = $ul.data('$ul_temp');
                    $ul_temp.find('li').appendTo($ul);
                    
                    if(val != ''){
                        $ul.find('li')
                            .not(':contains("' + val + '")')
                            .appendTo($ul_temp);
                    }
                });
            });
    });
});
</script>

管理画面URLパラメータによる分岐を記述していないため管理画面で利用されるグループ編集画面すべてに反映されます。
(記事・ウェブページ・アイテム・カテゴリ・フォルダ・フォーム・カスタム項目等)

カテゴリー
設定・管理画面カスタマイズ
投稿者
Fujimoto

Recent Entries