コラム
2021/03/29

Acquia(Drupal)での開発、保守作業で使い辛い、ハマった点

  • CMS
  • 運用
WEBSASくん

今回はAcquia(Drupal)での開発した際に発生した問題点と解決方法について、コラムにまとめました。
是非ご確認頂けると嬉しいです。

リーフレットダウンロード 

①ワークフローで、公開後に再利用すると動きに問題が発生する

ワークフローで、「下書き」⇒「承認依頼中」⇒「公開中」とコンテンツ(ページに表示するデータ)の状態を遷移できる。
「公開中」からは、「公開終了」にする事で、ページ表示がされなくなる遷移のほかに、
「公開中」から表示する値を変更する事で、また「下書き」の状態に遷移する事もできる
(この時ページ表示の値は、「公開中」の時の値が表示される)が、この状態の遷移の場合、下記の様な問題が発生した。

  • コンテンツを一覧表示する標準機能のページでは、title、更新日時、状態 が公開中にした時の値のままで表示されてしまう。
    最新の状態が一覧では分からないが、一覧から編集ページを表示すれば、最新データが表示されるので、最終的には編集ページを表示して確認となってしまう。
  • コンテンツにファイルを添付できるフィールドを設定できるが、公開後に、ファイルを差し替えて、下書きなどで保存すると、 ファイルを差し替えたユーザ以外が、このコンテンツを保存しようとすると、ファイルへのアクセス権がないとエラーとなり、 ワークフローが回せなくなる。
    対応方法①: 添付ファイルを削除し、新たに設定すると保存できるようになったので、 別途ファイルを共有するなどして、承認者がファイルを差し替えならが承認してゆく
    対応方法② アクセス権のチェック処理を無視するようにソースを改修する
    • ※公開前の下書きでは、添付ファイルの権限エラーは発生しないので、公開前後で動きが変わっている状態である。
      ファイルを添付できるフィールドの設定で、アップロード先を、デフォルトの「プライベートファイル」から、 「パブリックファイル」にすると、この現象は発生しないが、この設定は後からは変更できないので、注意が必要。

顧客との運用方法の取り決めで、公開後の再利用は不可にできるのであれば、再利用不可にした方が無難そうである。

①ワークフローで、公開後に再利用すると動きに問題が発生する

サーバーをパフォーマンス向上などにより、サーバーの数を追加したりすると、プログラムが出力しているログファイルが 削除される事がある。サーバー構成の変更作業は、Aquia が担当だが、事前にその様な連絡がなく、 ログファイルのバックアップを行う事もできず、顧客からの調査依頼が実施不能になってしまった。
cron など日次でログのバックアップ処理の組み込みを用意するのがよい。

③ログがサーバー単位で出力されるので、ログの確認が大変

サーバー毎にログファイルが出力される。ログを調査する時、どのサーバーで処理されたかは不明なので、 サーバー毎に確認してゆく作業となってします。
ファイル名は同じであるので、ダウンロードするには、フォルダを分けるか、サーバー毎にファイル名を変更する必要がある。

④入力したHTMLのタグが表示時に変わる

コンテンツ(ページに表示するデータ)には、htmlを格納できるフィールドを設定できるが、hmtlを入力し保存後、 コンテンツを編集で表示した時、htmlの値が変換されて表示される事がある。
この時、ページ表示の値は入力した値で表示されるので、保存時でなくコンテンツの編集ページ表示に変換されている。
このまま再度保存を行うと、変換されたhtmlで保存されてしまい、ページ表示が崩れてしまう事もある。
対応方法は、htmlを入力できるコンテンツを編集する場合は、2回保存を行った後にページ表示を確認する。

変換されてしまうタグの例

  • 開始タグと終了タグの間が空の時、このタグが削除されてしまう。
    対応方法は、開始終了タグの間に、半角スペース 又は、 を入れる

⑤公開前の作成結果の確認用に通常表示とプレビュー表示の2種類のソースが必要

コンテンツ(ページに表示するデータ)は、公開前の状態でも作成者がページ表示を行う機能はあるが、 コンテンツを一覧表示するページでは、作成者が公開前の状態を確認するのは通常のソースとは別のソースを用意する必要がある。
コンテンツを一覧表示するページの元は、ビューズ機能で用意するが、通常のページ表示では、元情報はコンテンツであるが、 公開前のを表示するには、元情報をコンテンツの履歴 にする必要があり、2つのビューズが必要となる。
ソースもビューズに合わせて用意し、ユーザによってどちらのビューズを使用するか振り分ける処理を入れる必要があり、 ビューズ、ソース共に2つ用意するはめとなる。

  • ※厳密にいうと、一度公開した後の下書きなどの場合、上記の対応が必要である。
    公開後の再利用が無ければ、ビューズの元情報はコンテンツで、フィルターの「掲載」=はい、を設定すると、 公開中のコンテンツのみ表示、「掲載」の条件が無ければ、全てのコンテンツが表示されるので、 フィルターで「掲載」=はい or ユーザ権限 などを設定すれば、作成者は公開前も表示され、一般ユーザは公開中のみ表示と 1つのビューズ、ソースで可能と思われる。

⑥キャッシュクリアしないとページ表示が最新化されない場合がある

クリアするキャッシュの種類が複数あり、環境や表示する物の種類によってクリアするキャッシュが異なり、 期待通りのページの表示に手間取ることがある
(ソースをアップロードしたのに、ページ表示がされず、ソースのミスと思い何度も修正、アップロードを 繰り返したりという羽目に)

キャッシュの種類

  • drupal:パフォーマンスのキャッシュクリア
  • ACQUIA CLOUD PLATFORM:clear Varnish
  • CLOUDFLARE:Cachingのパージ
  • ローカルPCのブラウザ:履歴の削除

場合によっては、これらを組み合わせて使用しないと表示されない

今回はAcquia(Drupal)での開発した際の事象をまとめました。
何かあれば是非Websasまでお問い合わせください!

トリット2