--

--

コメント

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
管理者にだけ表示を許可する

この記事のトラックバックURL

http://welcomevac201world.blog84.fc2.com/tb.php/441-10af1074

10

30

コメント

EC-CUBE 2.11から2.12への移行

うちの会社にて、EC-CUBEの移行作業が本格化してきました。

ECサイトは、まずは商品を決めたり、それで売上がきちんと出るかとか、
けっこう悶々としているお客様も多いようです。

昨日もお一人、主婦のお客様が、ご自身の趣味のものを販売するために相談しにこられました。
だいたい3時間くらいお話しさせて頂いていましたが、だいたい方向性が決まったようです。
さらに、また何度かお話しを伺って、それでサイトの制作がスタートです!

弊社は、東京都大田区池上の商店街の中にあります。
1階ですので、今日はいるのかなーってのぞいていただければ、
私か弟が対応させていただきます。
予算は要相談です。
サイト制作は、安くありませんが、なるべくお客様のご希望に答えたいと思います。
兄弟でやっている会社ですので、その辺りは、できるだけ融通がきくように、がんばりたいと思います。

株式会社パラファミリー
http://parafamily.co.jp

東京都大田区池上4-27-6 ラヴィール池上1F → [地図]


さて、本題のEC-CUBE2.11から2.12への移行について、まとめてみました。
ちょっと見にくいかもしれませんが、参考までにどうぞ。



0. 移行前の段取り

お客様に言っておかないといけないこと。

・既存会員のログイン時のパスワードが変更になります。
・移行作業時のサーバの停止時間の目安は3時間です。その間、購入と管理画面へのログインができなくなります。
・移行後になにか変更漏れがあったら、すぐにご指摘ください。

1. サーバの準備

2.11と2.12では、ソースコードもDBの内容も完全に同じではないため、
現在EC-CUBE2.11が稼動中のサーバに2.12をインストールし、再構築を行います。
DBも新しいデータベースを準備してください。
うちの場合は、eccube_db2とかの名前にして対応しました。

※弊社内ではDBはpostgresを使用していますので、MySQLをご利用の方はSQL等が異なりますので注意してください。

※弊社ではwordpressは標準的に用意されるべきだと判断しましたので、
EC-CUBEのインストール時に、[ec-cube2.12]/html/wordpressに一緒にインストールしました。

2. DBのコピー

まず、dumpファイルを取得する。
これは、データベースの所有者アカウントで作成したものです。

# pg_dump eccube_db --inserts --column-inserts -Fp > /home/eccubeuser/201208222230_dump.sql

dumpファイルは日時を付けた名前にしましたが、これは好みによって変更してください。
また、postgresなどのユーザで対応した場合は、/homeに保存できない場合もあるので、そのへんは臨機応変に。

さて、移行するDBを見てみます。

移行タイプ
画面:画面で登録しなおす
○ :対象のテーブルのデータを全部削除して、旧DBのdumpのinsert文を実行
△ :対象のテーブルのデータを全部削除して、旧DBのdumpのinsert文を一部修正して実行
- :移行しない

テーブル名移行タイプ備考
dtb_baseinfo画面
dtb_best_products
dtb_bkup
dtb_bloc
dtb_blocposition
dtb_category
dtb_category_count
dtb_category_total_count
dtb_class
dtb_classcategory
dtb_csv
dtb_customer
dtb_customer_favorite_products
dtb_deliv画面
dtb_delivfee画面
dtb_delivtime画面
dtb_holiday画面
dtb_index_list
dtb_kiyaku画面
dtb_mail_history
dtb_mailmaga_template
dtb_mailtemplate
dtb_member画面パスワードの作成プログラムが変わったので、インストール後に管理ユーザにてユーザを追加する。
dtb_module
dtb_module_update_logs
dtb_news
dtb_order
dtb_order_detail
dtb_order_temp
dtb_other_deliv
dtb_payment
dtb_payment_options
dtb_pagelayout
dtb_products
dtb_products_classdtb_class_combinationテーブルが削除になったため、だいぶ操作が必要(後述)
dtb_product_categories
dtb_product_status
dtb_recommend_products
dtb_review
dtb_send_customer
dtb_send_history
dtb_session
dtb_shipping
dtb_templates
mtb関連画面

それではDBのコピーを行っていきます。
これから行う作業は、全て、EC-CUBE2.12で使用するDBに対してです。
稼動中のDBにやらないように!!


取得したdumpファイルから、全データをチェックします。
以下の対応を各テーブルに行います。

insert文のみをUTF-8でまとめたテキストファイルをhomeディレクトリに置いて使用するのがいいと思います。

既存データの削除

以下のデータは全部削除してください。

-- データ削除用
delete from dtb_best_products;
delete from dtb_bloc;
delete from dtb_blocposition;
delete from dtb_category;
delete from dtb_category_count;
delete from dtb_category_total_count;
delete from dtb_class;
delete from dtb_classcategory;
delete from dtb_customer;
delete from dtb_customer_favorite_products;
delete from dtb_mail_history;
delete from dtb_mailmaga_template;
delete from dtb_mailtemplate;
delete from dtb_news;
delete from dtb_order;
delete from dtb_order_detail;
delete from dtb_order_temp;
delete from dtb_other_deliv;
delete from dtb_products;
delete from dtb_products_class;
delete from dtb_product_categories;
delete from dtb_product_status;
delete from dtb_recommend_products;
delete from dtb_review;
delete from dtb_send_customer;
delete from dtb_send_history;
delete from dtb_session;
delete from dtb_shipping;

次に、どかんと一括対応
EC-CUBE 2.11系であったカラムを一度設定します。
これによって、一括データのインストールを可能にします。

-- dtb_class_combination
CREATE TABLE dtb_class_combination (
class_combination_id integer NOT NULL,
parent_class_combination_id integer,
classcategory_id integer NOT NULL,
level integer
);

ALTER TABLE public.dtb_class_combination OWNER TO sweetheart;

CREATE SEQUENCE dtb_class_combination_class_combination_id_seq
START WITH 19
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;

ALTER TABLE public.dtb_class_combination_class_combination_id_seq OWNER TO sweetheart;
SELECT pg_catalog.setval('dtb_class_combination_class_combination_id_seq', 286883, true);

-- dtb_products_class
ALTER TABLE dtb_products_class ALTER classcategory_id1 DROP NOT NULL;
ALTER TABLE dtb_products_class ALTER classcategory_id2 DROP NOT NULL;
ALTER TABLE dtb_products_class DROP CONSTRAINT dtb_products_class_product_id_key;
ALTER TABLE dtb_products_class ADD COLUMN class_combination_id integer;

-- dtb_customer
ALTER TABLE dtb_customer ALTER point DROP NOT NULL;

-- dtb_order
ALTER TABLE dtb_order ALTER discount DROP NOT NULL;
ALTER TABLE dtb_order ALTER discount DROP DEFAULT;
ALTER TABLE dtb_order ALTER use_point DROP NOT NULL;
ALTER TABLE dtb_order ALTER use_point DROP DEFAULT;
ALTER TABLE dtb_order ALTER add_point DROP NOT NULL;
ALTER TABLE dtb_order ALTER add_point DROP DEFAULT;
ALTER TABLE dtb_order ALTER birth_point DROP NOT NULL;

-- dtb_order_temp
ALTER TABLE dtb_order_temp ALTER discount DROP NOT NULL;
ALTER TABLE dtb_order_temp ALTER discount DROP DEFAULT;
ALTER TABLE dtb_order_temp ALTER use_point DROP NOT NULL;
ALTER TABLE dtb_order_temp ALTER use_point DROP DEFAULT;
ALTER TABLE dtb_order_temp ALTER add_point DROP NOT NULL;
ALTER TABLE dtb_order_temp ALTER add_point DROP DEFAULT;
ALTER TABLE dtb_order_temp ALTER birth_point DROP NOT NULL;

-- dtb_shipping
ALTER TABLE dtb_shipping ADD COLUMN deliv_id integer;

-- dtb_order_detail
ALTER TABLE dtb_order_detail ALTER point_rate DROP NOT NULL;
ALTER TABLE dtb_order_detail ALTER point_rate DROP DEFAULT;

-- dtb_review
ALTER TABLE dtb_review ALTER title DROP NOT NULL;

これで、上の表で対応が「○」になっているテーブルは全部コピーできます。
一括でコピーしましょう。

例)
先ほど取得したdumpファイルの中から、dtb_customerのinsert文を探して全部コピーする。
/home/eccubeuser/dtb_customer_insert.sqlを作成する。
postgresに入り、以下を実行

¥i /home/haircarry/dtb_customer_insert.sql

だーーーーっとエラー無く、処理が終わればおk。





⊂(゚Д゚⊂⌒`つ≡≡≡≡≡コピー中≡≡≡≡≡





次に、dtb_products_classを対応します。
dtb_class_combinationテーブルがEC-CUBE2.12では無くなってしまったので、
先ほどそのテーブルを追加しました。
dtb_class_combinationテーブルとdtb_productsテーブルにデータを投入後、
dtb_products_classテーブルにもデータを追加してください。

UPDATE dtb_products_class
SET
classcategory_id1 = COALESCE(
(
SELECT classcategory_id
FROM dtb_class_combination
WHERE class_combination_id = dtb_products_class.class_combination_id
)
,0
)
;

UPDATE dtb_products_class
SET
classcategory_id2 = COALESCE(
(
SELECT classcategory_id
FROM dtb_class_combination
WHERE class_combination_id =
(
SELECT parent_class_combination_id
FROM dtb_class_combination
WHERE class_combination_id = dtb_products_class.class_combination_id
)
)
,0
)
;

最後にDBを2.12の形に戻して行きます。

-- dtb_products_class
ALTER TABLE dtb_products_class ALTER classcategory_id1 SET NOT NULL;
ALTER TABLE dtb_products_class ALTER classcategory_id2 SET NOT NULL;
ALTER TABLE dtb_products_class DROP COLUMN class_combination_id;
DROP TABLE dtb_class_combination;

-- dtb_customer
UPDATE dtb_customer set point = 0 where point is null;
ALTER TABLE dtb_customer ALTER point SET NOT NULL;

-- dtb_order
UPDATE dtb_order set discount = 0 where discount is null;
UPDATE dtb_order set use_point = 0 where use_point is null;
UPDATE dtb_order set add_point = 0 where add_point is null;
UPDATE dtb_order set birth_point = 0 where birth_point is null;
ALTER TABLE dtb_order ALTER discount SET NOT NULL;
ALTER TABLE dtb_order ALTER discount SET DEFAULT 0;
ALTER TABLE dtb_order ALTER use_point SET NOT NULL;
ALTER TABLE dtb_order ALTER use_point SET DEFAULT 0;
ALTER TABLE dtb_order ALTER add_point SET NOT NULL;
ALTER TABLE dtb_order ALTER add_point SET DEFAULT 0;
ALTER TABLE dtb_order ALTER birth_point SET NOT NULL;

-- dtb_order_temp
UPDATE dtb_order_temp set discount = 0 where discount is null;
UPDATE dtb_order_temp set use_point = 0 where use_point is null;
UPDATE dtb_order_temp set add_point = 0 where add_point is null;
UPDATE dtb_order_temp set birth_point = 0 where birth_point is null;
ALTER TABLE dtb_order_temp ALTER discount SET NOT NULL;
ALTER TABLE dtb_order_temp ALTER discount SET DEFAULT 0;
ALTER TABLE dtb_order_temp ALTER use_point SET NOT NULL;
ALTER TABLE dtb_order_temp ALTER use_point SET DEFAULT 0;
ALTER TABLE dtb_order_temp ALTER add_point SET NOT NULL;
ALTER TABLE dtb_order_temp ALTER add_point SET DEFAULT 0;
ALTER TABLE dtb_order_temp ALTER birth_point SET NOT NULL;

-- dtb_shipping
ALTER TABLE dtb_shipping DROP deliv_id;

-- dtb_order_detail
UPDATE dtb_order_detail set point_rate = 0 where point_rate is null;
ALTER TABLE dtb_order_detail ALTER point_rate SET NOT NULL;
ALTER TABLE dtb_order_detail ALTER point_rate SET DEFAULT 0;

-- dtb_review
UPDATE dtb_review set title = '' where title is null;
ALTER TABLE dtb_review ALTER title SET NOT NULL;

SEQUENCEを再設定します。

SELECT SETVAL('dtb_api_account_api_account_id_seq', (SELECT MAX(api_account_id) + 1 FROM dtb_api_account));
SELECT SETVAL('dtb_api_config_api_config_id_seq', (SELECT MAX(api_config_id) + 1 FROM dtb_api_config));
SELECT SETVAL('dtb_best_products_best_id_seq', (SELECT MAX(best_id) + 1 FROM dtb_best_products));
SELECT SETVAL('dtb_bloc_bloc_id_seq', (SELECT MAX(bloc_id) + 1 FROM dtb_bloc));
SELECT SETVAL('dtb_category_category_id_seq', (SELECT MAX(category_id) + 1 FROM dtb_category));
SELECT SETVAL('dtb_class_class_id_seq', (SELECT MAX(class_id) + 1 FROM dtb_class));
SELECT SETVAL('dtb_classcategory_classcategory_id_seq', (SELECT MAX(classcategory_id) + 1 FROM dtb_classcategory));
SELECT SETVAL('dtb_csv_no_seq', (SELECT MAX(no) + 1 FROM dtb_csv));
SELECT SETVAL('dtb_csv_sql_sql_id_seq', (SELECT MAX(sql_id) + 1 FROM dtb_csv_sql));
SELECT SETVAL('dtb_customer_customer_id_seq', (SELECT MAX(customer_id) + 1 FROM dtb_customer));
SELECT SETVAL('dtb_deliv_deliv_id_seq', (SELECT MAX(deliv_id) + 1 FROM dtb_deliv));
SELECT SETVAL('dtb_holiday_holiday_id_seq', (SELECT MAX(holiday_id) + 1 FROM VISIT_EVENT));
SELECT SETVAL('dtb_kiyaku_kiyaku_id_seq', (SELECT MAX(kiyaku_id) + 1 FROM dtb_kiyaku));
SELECT SETVAL('dtb_mail_history_send_id_seq', (SELECT MAX(send_id) + 1 FROM dtb_mail_history));
SELECT SETVAL('dtb_mailmaga_template_template_id_seq', (SELECT MAX(template_id) + 1 FROM dtb_mailmaga_template));
SELECT SETVAL('dtb_maker_maker_id_seq', (SELECT MAX(maker_id) + 1 FROM dtb_maker));
SELECT SETVAL('dtb_member_member_id_seq', (SELECT MAX(member_id) + 1 FROM dtb_member));
SELECT SETVAL('dtb_module_update_logs_log_id_seq', (SELECT MAX(log_id) + 1 FROM dtb_module_update_logs));
SELECT SETVAL('dtb_news_news_id_seq', (SELECT MAX(news_id) + 1 FROM dtb_news));
SELECT SETVAL('dtb_order_detail_order_detail_id_seq', (SELECT MAX(order_detail_id) + 1 FROM dtb_order_detail));
SELECT SETVAL('dtb_order_order_id_seq', (SELECT MAX(order_id) + 1 FROM dtb_order));
SELECT SETVAL('dtb_other_deliv_other_deliv_id_seq', (SELECT MAX(other_deliv_id) + 1 FROM dtb_other_deliv));
SELECT SETVAL('dtb_pagelayout_page_id_seq', (SELECT MAX(page_id) + 1 FROM dtb_pagelayout));
SELECT SETVAL('dtb_payment_payment_id_seq', (SELECT MAX(payment_id) + 1 FROM dtb_payment));
SELECT SETVAL('dtb_plg_templateversion_version_id_seq', (SELECT MAX(version_id) + 1 FROM dtb_plg_templateversion));
SELECT SETVAL('dtb_plugin_hookpoint_plugin_hookpoint_id_seq', (SELECT MAX(plugin_hookpoint_id) + 1 FROM dtb_plugin_hookpoint));
SELECT SETVAL('dtb_plugin_plugin_id_seq', (SELECT MAX(plugin_id) + 1 FROM dtb_plugin));
SELECT SETVAL('dtb_products_class_product_class_id_seq', (SELECT MAX(product_class_id) + 1 FROM dtb_products_class));
SELECT SETVAL('dtb_products_product_id_seq', (SELECT MAX(product_class_id) + 1 FROM dtb_products_class));
SELECT SETVAL('dtb_review_review_id_seq', (SELECT MAX(review_id) + 1 FROM dtb_review));
SELECT SETVAL('dtb_send_history_send_id_seq', (SELECT MAX(send_id) + 1 FROM dtb_send_history));


※※※※※※ ! 超 注 意 ! ※※※※※※※※

dtb_bloc登録時に、NULLのところを文字列の'NULL'にしてしまうと、
php_pathが正しく読み込めず、表示されません!
これに何時間かはまりました。みんな気をつけて!!

3. 管理ユーザの追加/変更

管理者ユーザのデータ移行は行わないため、手動で追加してください。

4. ファイルのアップロード
EC-CUBE/dataのほうのファイルのうち、処理を追加しているところを、慎重に移していきます。
EC-CUBE/data/Smarty/templatesのフォルダ内のファイルのうち、更新されているものをすべて新サーバに移していきます。

EC-CUBE/html/uploadのフォルダ内のファイルをすべて新サーバにコピーします。
EC-CUBE/html/user_dataのフォルダ内のファイルのうち、更新されているものをすべて新サーバに移していきます。

テンプレートのコピーを新サーバにアップロード後、管理画面のデザイン管理>PC/モバイル/スマートフォン>テンプレート設定にて、デザインを適用します。
タグが閉じていない等の理由により、画面を表示するとエラーが多発します。
そのため、PC/モバイル/スマートフォンの全画面の表示チェックを行います。購入できるかどうかなどもチェックしてください。
このとき、ファイルパーミッションに気をつけてください。

上の作業を行った後、もともとテンプレートをdefaultではないものを使用していたり、defaultを直接変更していた場合は、以下の作業を行います。

EC-CUBE 2.12のEC-CUBE/data/Smarty/templatesの中から、基本となるテンプレートを新サイトのテンプレートに上書きします。
旧サイトで使用していたテンプレートと現在のテンプレートをDFなどのツールで比較します。旧サイトのほうで変更したテンプレートファイルを1つずつ検証してアップしていきます。

2.11で使えていたテンプレートは、2.12で使えないものも多いですが、きちんと移行作業を行えば、見た目は同じままいけます!
この辺りは、他のサイトの説明に譲ります。

5. 基本情報のコピー

SHOPマスターより、以下の情報を新サイトにコピーします。
ただし、メール部分は送信テストを行うため、「 test@new_eccube.co.jp 」などと設定しましょう。
以下の内容のうち、いちばん最初に行うのは郵便番号DB登録です。
自動で更新ボタンを押しましょう。

・特定商取引法
・配送方法設定
・支払方法設定
・ポイント設定
・メール設定
・SEO管理
・会員規約設定
・郵便番号DB登録
・定休日管理

弊社では、よいタイミングですので、支払方法を増やしたり、
ポイント設定やメールテンプレートの見直しも行ったりしました。

また、SEOについても、きちんと対応できているかの再確認を行い、変更したりしました。

6. その他のカスタマイズについて

納品書を変更している、商品項目を増やしている、メール送信内容を変更しているなど、サイト個別に設定が必要なものの設定・開発は、個別に確認してください。

よくある更新内容

メールテンプレートの追加
システム設定>マスターデータ管理から、mtb_mail_templateを選択して追加してください。その後、SHOPマスターにてテンプレート情報を登録してください。

商品画像の追加
システム設定>パラメーター設定にて、PRODUCTSUB_MAXを必要な数に設定する。
初期のテーブルではサブ画像は6点のため、以降の数字を用いてカラムを追加する。
SC_Product_Ex.phpにてfunction alldtlSQLに画像情報の追加した番号のカラムを追加する。

7. プラグインのインストール

※※※※※※ ! 超 注 意 ! ※※※※※※※※

プラグインのインストールは移行作業が完全に完了した後に行うこと!
そうしないと、dtb_blocなどの情報で競合が発生して、あとから大変です!

8. おまけ

dtb_memberのデータを間違ってアップデートしちゃったYO!
2.12はhash_hmac(PASSWORD_HASH_ALGOS, $str . ':' . AUTH_MAGIC, $salt);というアルゴリズムでパスワードが生成されています。
上書きしちゃったデータの「salt」部分に記載されている文字列とdata/config/config.phpに記載されているAUTH_MAGICとPASSWORD_HASH_ALGOSの値を使用してデータを生成します。
Cent OSにログインして、rootユーザにて

# echo '<?php echo hash_hmac("[PASSWORD_HASH_ALGOSの値]", "[ここに新しいパスワード]:[AUTH_MAGICの値]", "[saltの値はDBで上書きしちゃったユーザに設定されているもの]"); ?>' | php

を打ち込めばおkなんかやたら長い文字列が取得できます。
上の例では、このデータをdtb_memberの上書きしちゃったユーザのパスワードに上書きすると、ログインできます。


ということで、無事にEC-CUBEの移行ができましたー。
あとはドメインの向き先を変えれば画面は表示されましたでしょうか。

もし、仮のドメインを設定して対応していた場合は、
最後にdata/config/config.phpに記載されているURLを変更しないと、
管理画面にログインできません!
注意してください!
関連記事
スポンサーサイト
管理者にだけ表示を許可する

この記事のトラックバックURL

http://welcomevac201world.blog84.fc2.com/tb.php/441-10af1074

ようこそ!

ブロとも申請フォーム

ブロ友申請大歓迎です!
一覧に表示されるので自動で相互リンクになります!

>> ブロ友申請はこちら <<

検索フォーム

最近のコメント

メールフォーム

名前:
メール:
件名:
本文:

FC2ブログランキング

人気ブログランキング

人気ブログランキング

ブログ村

アクセスランキング

[ジャンルランキング]
育児
633位
アクセスランキングを見る>>

[サブジャンルランキング]
パパ育児
49位
アクセスランキングを見る>>

やーんは今、

ブロとも一覧

Designed by

Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。