このブログは、数回に分けて記載したいと思っています。

と、いうのは、

最初の、サーバー環境からのローカル環境のセットアップが中々大変だからです。

理由は、v8.5.6からv8.5.7への移行に際してエクスポート➡インポートがうまく動作しないことです。

調べてると、根本の理由は、テーブルのレイアウトが変更されたことでした。

  • Fieldが削除されている
  • Field名が変更されている

等で、インポート中にエラーになります。

エラーメッセージは、以下の様な内容です。

MySQL のメッセージ:
  「ドキュメント #1054 - 列 'ak_job_posting_department' は 'field list' にはありません。」

下のTableの例では、削除されたFieldの内容が、
エクスポート側で、NULLまたは0、の値であったため、
個別のインポート用にSQL文を修正することで問題なさそうです。

INSERT INTO `CollectionSearchIndexAttributes` (`cID`, `ak_meta_title`, `ak_meta_description`, `ak_meta_keywords`, `ak_desktop_priority`, `ak_is_desktop`, `ak_icon_dashboard`, `ak_exclude_nav`, `ak_exclude_page_list`, `ak_header_extra_content`, `ak_tags`, `ak_is_featured`, `ak_exclude_search_index`, `ak_exclude_sitemapxml`
, `ak_job_posting_department`, `ak_job_location`, `ak_exclude_subpages_from_nav`, `ak_thumbnail`, `ak_blog_entry_topics`, `ak_project_topics`, `ak_project_client`, `ak_project_tasks`, `ak_project_skills`, `ak_og_image`) VALUES
(1, ~~~~~~~~~   ;


 

INSERT INTO `CollectionSearchIndexAttributes` (`cID`,`ak_meta_title`,`ak_meta_description`,
`ak_meta_keywords`,`ak_desktop_priority`,`ak_is_desktop`,`ak_icon_dashboard`,`ak_exclude_nav`,
`ak_exclude_page_list`,`ak_header_extra_content`,`ak_tags`,`ak_is_featured`,`ak_exclude_search_index`,
`ak_exclude_sitemapxml`) VALUES
(1, ~~~~~~~~~   ;

に修正。

ただ、これだけじゃあ無さそうなので、一度にインポートできません。
エラー発生都度、内容を確認しながら行うしかなさそうです。

(この後に分かったことは

  1. 削除されたFieldに、有効な値0やNULL以外)がセットされているもの
  2. 同じ位置のField名が新バージョンでは変更されているもの

)がありました。

 1.については、他のTableに移行したことが発見出来たら、
         他のTableのInsert文を変更する必要がでてきます。
 (もし他のTableに該当のFieldが見つからなければ
   無視して旧FieldはDrop(移行しない)するしかないでしょう。
  この場合、開発サイトにどの様な影響が出るか?リスク含みとなります。)

 2.については、Fieldの属性(Type)と桁数が、同じであれば、Insert文のField名を、
      新しいField名にリネーム(変更)して、
      INSERT INTO 個別に実行することにします(こちらのリスクは低いかと考えています)

なんと、このTableは10個もFieldが無くなっている!!!

テーブル:CollectionSearchIndexAttributes

# Field Type
01 cID int(10)
02 ak_meta_title longtext
03 ak_meta_description longtext
04 ak_meta_keywords longtext
05 ak_desktop_priority decimal(14,4)
06 ak_is_desktop tinyint(1)
07 ak_icon_dashboard longtext
08 ak_exclude_nav tinyint(1)
09 ak_exclude_page_list tinyint(1)
10 ak_header_extra_content longtext
11 ak_tags longtext
12 ak_exclude_page_list tinyint(1)
13 ak_exclude_search_index tinyint(1)
14 ak_exclude_sitemapxml tinyint(1)
15 ak_job_posting_department NULL
16 ak_job_location NULL
17 ak_exclude
_subpages_from_nav
0
18 ak_thumbnail 0
19 ak_blog_entry_topics NULL
20 ak_project_topics NULL
21 ak_project_client NULL
22 ak_project_tasks NULL
23 ak_project_skills NULL
24 ak_og_image 0

は、主Key

は、削除されたField

このTableの例では、

将来使う予定であったField(値に、0やNullがセットされていた為)が、
今後も使用しないFieldとなった為、削除した様に思われる。

(多分、通常のバージョンアップでは、この辺りのSQL文は考慮されているものと考えられる)

と、いう訳で移行も、
このブログも長期戦になりますので、別の記事にしたいと考えています。

移行後のイメージ

下の画像は、別の開発環境のイメージです。
ConcreteCMSv9.0.2新規インストールで、
Theme:Atomikのフルサイト状態です。

2022/04/27追記

要検討事項

新たな、課題がみつかりました。
それは、v8.5.7になって削除されたFieldの内、v8.5.6時点のFieldに有効な値(0やNullでない)が含まれているTableが見つかったからです。
以下に、新たに見つけたTableの内容を(異なる記述方法で)記載します。
 

テーブル:UserSearchIndexAttributes

# Field (v8.5.6) Type
1 uID int(10) unsigned PrimaryKey
2 ak_profile_private
_messages_enabled
tinyint(1)
3 ak_profile_private
_messages_notification_enabled
tinyint(1)
4 ak_nick_name longtext v8.5.7#N/A
5 ak_bio longtext v8.5.7#N/A
6 ak_Restaurant longtext v8.5.7#N/A
7 ak_Sport longtext v8.5.7#N/A
8 ak_Photo_studio longtext v8.5.7#N/A

PrimaryKeyは、主Key

v8.5.7#N/Aは、削除されたField
但し、このTableのFieldの(ak_nick_name)値は, 0Nullでなく、「有効な値」が格納されています。

ak_nick_nameはField名からして重要ではなさそうですが、
他のTableで、同様なもの(有効な値が、格納されたFieldが削除されたもの)が見つかった場合は➡


本環境のv8.5.6から、ローカルの開発環境v8.5.7への移行方歩を考え直す必要がありそうです。➡

ConcreteCMSの開発環境をローカル環境に構築2

同じトピックの次の記事