a-blog cms Ver. 3.0 系 の APCuキャッシュに関する不具合について


a-blog cms Ver. 3.0系で、 APCu というphp共有メモリキャッシュ について問題が見つかりました。 同じphp実行ユーザーで動作させる a-blog cms 環境がサーバー内に複数ある場合、別々の a-blog cms でもキャッシュが共有されてしまう可能性がございます。

対象となる条件 (AND条件)

  • ご利用のサーバーでAPCuが有効の場合
  • 同サーバー内に複数の a-blog cms を設置
  • .envファイルで、キャッシュにAPCuを指定している場合(デフォルト設定)

問題への対応方法1

Ver. 3.0.7 へのアップデートを行う事で、この問題は解消されます。

問題への対応方法2

APCuキャッシュが問題になりますので、APCuキャッシュを利用しないようにします。
ドキュメントルートにある 「.env」 ファイルを編集します。各項目のキャッシュドライバーに 「apcu」 が指定されている場合は、他のドライバーに変更します。

デフォルトの状態だと、以下の3つに 「apcu」 ドライバーが選択されています。

  • テンプレートキャッシュ (ACHE_TEMPLATE_DRIVER)
  • フィールド情報キャッシュ (CACHE_FIELD_DRIVER)
  • 一時キャッシュ(CACHE_TEMP_DRIVER)

これは、他のドライバーに変更します。 テンプレートキャッシュ、フィールド情報キャッシュは、「file」、一時キャッシュは「memory」が推奨です。

# テンプレートのキャッシュをするドライバーを選択します
CACHE_TEMPLATE_DRIVER=file
CACHE_TEMPLATE_NAMESPACE=template
CACHE_TEMPLATE_LIFETIME=2678400

# フィールド情報のキャッシュをするドライバーを選択します
CACHE_FIELD_DRIVER=file
CACHE_FIELD_NAMESPACE=field
CACHE_FIELD_LIFETIME=86400

# 一時キャッシュで利用するドライバーを選択します
CACHE_TEMP_DRIVER=momory
CACHE_TEMP_NAMESPACE=temp
CACHE_TEMP_LIFETIME=10800

この度はご迷惑をおかけしてしまい申し訳ございません。
該当する内容の場合、バージョンアップなどご対応のほどよろしくお願いいたします。
今後とも a-blog cms をよろしくお願いいたします。

Ver. 3.0.7 リリースのお知らせ


この記事では、2022年2月25日にリリースした Ver. 3.0.7 の修正内容について紹介いたします。

現在お困りの問題に該当する項目がありましたら、お早めにバージョンアップのご検討をお願いいたします。

Ver. 3.0.7 リリースノート

  • CMS-5858 UTSUWAのjsがbundle時にwarningが出ている問題を修正
  • CMS-5859 action.htmlのボタンにid属性を追加
  • CMS-5860 位置情報有効にするとブログ管理のページがPHPエラーで表示されなくなる問題を修正
  • CMS-5861 メディア機能でGif画像がアップロードできない問題を修正
  • CMS-5862 サマリー系モジュールで、カスタムフィールドが entryFieldブロックの中で表示できない問題を修正
  • CMS-5863 サマリー系モジュールで、関連エントリー機能 or PHP8でエラーが起きる可能性がある問題を修正
  • CMS-5867 Ver. 3.0 系でメールマガジンが送信できない、ダウンロードモジュールが動作しない問題を修正
  • CMS-5868 一括変更フィールド設定のツールチップのスタイル崩れ
  • CMS-5869 Siteテーマのアクセシビリティ改善
  • CMS-5870 検索結果の空ページに新規作成ボタンを設置
  • CMS-5876 APCu のキャッシュが 同空間の 他a-blog cmsのキャッシュと衝突する可能性を修正
  • CMS-5875 Entry_Summary系モジュールで、エントリのカスタムフィールドが entryFieldブロックの中でしか展開できない問題を修正
  • CMS-5873 ユーザー編集画面で、メルマガのチェックボックスが表示されない場合がある問題を修正
  • CMS-5882 Tag_Filterモジュールのコンフィグ「リンク」の設定値が反映されない問題を修正
  • CMS-5881 .htaccess の リダイレクト設定を調整
  • CMS-5879 beginnerテーマのフォームの初期バリデート設定が間違っている問題を修正
  • CMS-5883 ダッシュボードでログイン履歴が表示されない問題を修正
  • CMS-5880 User_GeoListがエラー発生して正常に動作しない問題を修正
  • CMS-5884 拡張アプリのアップデート時に他の拡張アプリのステータスがおかしくなる可能性がある問題を修正
  • CMS-5833 エントリー項目設定のサブカテゴリーの「選択肢を子カテゴリーに限定」設定が反映されずカテゴリーの設定をみてしまう問題を修正

主なリリースノートの詳細な内容

CMS-5876 APCu のキャッシュが 同空間の 他a-blog cmsのキャッシュと衝突する可能性を修正

詳細については下記のブログに記載されていますので、キャッシュの衝突にお困りの方は下記のブログをご一読ください。


CMS-5875 Entry_Summary系モジュールで、エントリのカスタムフィールドが entryFieldブロックの中でしか展開できない問題を修正

Ver. 3.0.7 以前のVer. 3.0系では、Entry_Summary系モジュールで loop を使用する際、entryFieldブロックで loop を囲まなければ展開できませんでした。

こちらを見直し、新バージョンでは entryFieldブロックなしでも loop が動作するよう修正しました。

旧式の記述
<!-- BEGIN entry:loop -->
<!-- BEGIN entryField -->
<!-- BEGIN hoge:loop -->
{hoge}
<!-- END hoge:loop -->
<!-- END entryField -->
<!-- END entry:loop -->
新式の記述
<!-- BEGIN entry:loop -->
<!-- BEGIN hoge:loop -->
{hoge}
<!-- END hoge:loop -->
<!-- END entry:loop -->

CMS-5833 エントリー項目設定のサブカテゴリーの「選択肢を子カテゴリーに限定」設定が反映されずカテゴリーの設定をみてしまう問題を修正

Ver. 3.0.7 以前は、コンフィグ/編集設定 内「エントリー項目設定」における、サブカテゴリー「選択肢を子カテゴリーに限定」が正常に機能しておりませんでしたが、今回バージョンで正しく設定できるよう修正しました。



最後に

この度はご迷惑をおかけしてしまい申し訳ございませんでした。該当する問題がありましたら、お早めにバージョンアップのご検討をお願いいたします。 また、迅速にご報告いただいたユーザーの皆さま、誠にありがとうございました。

今後もご報告いただいた内容に対して真摯に受け止め修正と改善を行ってまいりますので、よろしくお願いいたします。

Google スプレッドシート との連携機能


a-blog cms Ver.2.8.0より拡張アプリ「Google Sheets」を利用できるようになります。 a-blog cmsの拡張アプリ「Google Sheets」を使うとお問い合わせフォームなどで送信された内容をGoogle スプレッドシートで作成した任意のスプレッドシートの最後の行に追記することができます。

拡張アプリの導入

拡張アプリ一覧 より Google Sheets の拡張アプリをダウンロードし、zipファイルを解凍します。解凍したフォルダを /extension/plugins/に設置します。



そして、config.server.phpを1にし、拡張アプリからHook処理をかけられるようにします。

define('HOOK_ENABLE', 1);

CMSを設置したサイトにアクセスし、管理画面 > 拡張アプリの順にページを移動し、 Google Sheets をインストールします。


API連携の方法

以下の3つのステップで a-blog cms と Google スプレッドシート を連携します。

  1. ClientID JSON の取得
  2. ClientID JSON を CMS側に登録
  3. フォームIDに書き込みしたいSpreadsheetIDとSheetIDを紐づける

1. ClientID JSON の取得

まずは、Google Cloud Platform にアクセスしてログインしてください。

ログイン後、セレクトメニューをクリックし、プロジェクトを選択します。



任意の名前でプロジェクトを新規作成するか、既に別のAPIをつかっていて設定している場合はプロジェクトを選択します。


次は、サイドバーの「ライブラリ」という項目をクリックし、API ライブラリのページに移動します。そのページにて、Google Sheet APIという項目を検索して有効化してください。





最後にサイドバーの「認証情報」」という項目をクリックし、認証情報」のページに移動します。そこで新たにOAuth クライアント ID を作成します。 アプリケーションの種類として、「ウェブアプリケーション」を設定して、「認証済みのリダイレクトURI」には「ドメイン名/bid/(現在使用しているブログのBID)/admin/app_google_spreadsheet_callback」を設定します。



※新規でプロジェクトを作成した場合、OAuthクライアントID作成前に同意画面の設定を登録する必要があります(2021年3月現在)

アプリケーションの種類を「ウェブアプリケーション」を選択してOAuthクライアントIDを作成してください。



※ablogcms.ioで「認証済みのリダイレクトURI」に正常に登録できない場合は、「OAuth同意画面」のページにある公開ステータスの項目を「テスト」にすれば登録できます(2021年3月現在)

その後、クライアントIDなどの情報が記述されたJSONファイルをダウンロードしましょう。


次にダウンロードしたJSONファイルをサーバーにアップロードします。ドキュメントルート以下にアップロードをするとブラウザからアクセスできてしまいますので、ドキュメントルートより上の階層にアップロードするのが望ましいです。

2. ClientID JSON を CMS側に登録

CMSの管理画面に戻り、サイドバーに「Google Sheets」という項目が増えているので、クリックして Google Sheets のページへ移動します。

そして先ほど設置したJSONファイルへのパスを記述します。絶対パスで記述しましょう。パスを記述後、設定を保存してから、「認証」ボタンをクリックして認証するようにしましょう。

※ablogcms.ioで行う場合は、ルートディレクトリには設置できないため、「themes」フォルダなどにJSONファイルを設置します。 ablogcms.ioでの記述例: /var/www/vhost/xxxxxx.ablogcms.io/html/themes/xxxxxxxx.json


3. フォームIDに書き込みしたいSpreadsheetIDとSheetIDを紐づける

さらにCMSの管理ページで、フォームIDに対して書き込みたい Google Sheets のIDを指定する必要があります。
管理画面 > フォームの順にページを移動し、任意のフォームIDの変更画面に移動すると、「Google スプレッドシート Form 設定」という項目が増えています。


Spreadsheet IDと Sheet ID は、開いている スプレッドシート のURLから調べることができます。

https://docs.google.com/spreadsheets/d/{Spreadsheet ID}/edit#gid={Sheet ID}

設定が完了すれば、お問い合わせフォームから送信された内容を Google スプレッドシート に自動で追加登録できます。下の図のような実行結果になっていれば成功です。