タイトルの通り。

 もう少し正確に書くと以下のようなエラーが出た。

 

Failed opening required ‘/var/cache/prod/doctrine/orm/Proxies/__CG__{なにかエンティティクラス名.php’ 

 

 キャッシュが作られていない(または期限切れ)状態でのページ表示がタイムアウトなどで失敗し、doctrine(DB周り)のキャッシュが作られなかったが、ほかのキャッシュはある程度作られている状態で発生するっぽい。

 

 仮想マシン+Win10+XAMPPという激重環境で発生したけど、アクセスが多いサイトなら発生する可能性はある。

 

 再現させるのは簡単で、一度ページを開きキャッシュが生成された状態にして、/var/cache/prod/doctrine/orm/Proxies/以下のファイルを全部削除してしまえばいい。

 このエラーでやっかいなのは一度発生すると作られなかったキャッシュに該当するエンティティクラスを利用するページで必ずエラーになること。キャッシュなので時間がたてば期限切れで再度生成されるんじゃないかと思うけど、それまでの間はエラーになり続けるっぽい。

 

 寿司も作れるEC-CUBE界隈のハイスペックエンジニアの方に相談すると、どうやらSymphony 3の挙動っぽい。

 

 というわけで、ネットで調べてみると対応方法は以下の通り、

 (参考)stackoverflow : Symfony Cache doctrine/orm/Proxies failed to open stream /Proxy/AbstractProxyFactory.php on line 209

 

app/config/eccube/packages/doctrine.yaml を以下のように修正

 

    orm:
        auto_generate_proxy_classes: '%kernel.debug%'

 

 を、

 

    orm:
        auto_generate_proxy_classes: true

 

 変更したらキャッシュをいったんクリア(/var/cache/prod/以下のファイルを削除)しておく。たぶん、設定もキャッシュしているからそれをクリアするため。

 

 初期状態では、一度サイトにアクセスした際に、すべてのエンティティクラスへのキャッシュを生成して、以降はキャッシュが作られている前提で処理を進めるのでファイルが無いとエラーになる。

 設定を変更するとそのページに必要なエンティティクラスへのキャッシュを作成し、無ければ生成するという挙動に代わるので、ファイルが無くてもエラーにならない。

 

 最初に全部キャッシュを作った方が、次回以降の表示が早くなりそうだけど、doctrine部分だけだし、そこまでパフォーマンスに影響は出ないんじゃないかなぁと思うけど、EC-CUBE 4をまだ深く理解していないので、検証は各自で行ってください。


 記事「Windows Subsystem for LinuxでEC-CUBE4を動かす その1(WSLインストール)」から始まる一連の投稿で書いたが、WSLはパフォーマンスが今のところ出ない。

 個人的には仮想マシンでLinuxやUnixを立てて欲しいところではあるが、XAMPPがお手軽という意見はあると思うのでインストールしてみた。

 (VirtualBox上のWindows10+XAMPPで試したのでパフォーマンスについてはノーコメントで)

 

 インストールしてみた結論を書くと、意外とあっさり動いた。

 PHPのモジュールとか足りなくて色々エラーがでることを覚悟していたんだけど・・・。

 

XAMPPの準備

 

 XAMPPの最新版はPHP 7.2.11なのでシステム要件は十分。

 まっさらのWindows10なら、素直にインストールも終了。

 

 XAMPPのコンソールからApacheとMySQLを起動しておく。

 

 php.iniを開いて、

 

;extention=intl

 

 の「;」を外して有効化しておく。その際はApacheの再起動を忘れずに。

 後はMySQL(XAMPPだとMaria DB)のrootにパスワードを設定(または新規ユーザーを作成)して、EC-CUBE 4用のデータベースを作成しておく。

 

EC-CUBE 4のインストール

 

 EC-CUBE 4の公式からDLしたzipを解凍してドキュメントルート(デフォルトならC://xampp/htdocs)以下の任意の位置に配置。

 後はEC-CUBE 4のルートフォルダにアクセスすればインストールが始まるはずです。

 

おまけ:エラーに遭遇

 

 インストール途中で画像のようなエラーになりました。

 

 ページ表示の際にPHPのMaximum execution time(PHPの実行にmax_execution_time以上の時間がかかった)エラーで落ちると、正常にキャッシュファイルが作成されず次回以降の表示ができないという流れのよう。

 max_execution_timeを色々変えてみたけど必ず発生するわけではない模様。コケるタイミング次第かなぁ。

 

 一時的な対応としてはキャッシュファイル(var/cache/prod以下)を削除してmax_execution_timeを長めに取るなどでエラーになりにくくはできるけど、キャッシュが正常に作られなかった際にエラーで落ちずにキャッシュを使わずにページ表示して、表示できたらキャッシュを作り直すなどの流れが望ましいかなぁ。

 

 たぶん、フォーラムの以下の質問も同じ症状かなぁ。

 フォーラム:「システムエラーが発生しました。 大変お手数ですが、サイト管理者までご連絡ください。」

 


 タイトルの通りですが、LinkedIn様でXamarinの基礎講座を公開いただきました。

 

 Xamarin 基本講座

 

 Windows PCだけでなく、iPhone、Android、Macなどを使い分けながら動画を作成した苦労が思い出されます。

 ・・・という、ある意味力作なのでぜひ視聴してみてください。

 


 コマンドラインからEC-CUBE4をインストールする方法を簡単に紹介します。

 参考にしたのは公式のドキュメント。

 

http://doc4.ec-cube.net/quickstart_install

 

Composerのインストール

 

 EC-CUBE4をコマンドラインからインストールするには  Composerが必要です。

 以下のコマンドを実行して Composerを有効化します。

 

#php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
#php -r "if (hash_file('SHA384', 'composer-setup.php') === '93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
#php composer-setup.php
#php -r "unlink('composer-setup.php');"

プロジェクトを作成

 

 Composerを利用してEC-CUBEのプロジェクトを作成します。

 

php composer.phar create-project ec-cube/ec-cube ec-cube “4.0.x-dev” –keep-vcs

 

 Gitやunzipがあるとそちらを利用した方法を使うようだけど、無くてもちゃんとプロジェクトは作成されます(黄色い警告は表示されるけど問題なさそう)。

 ”4.0.x-dev”の部分はパッケージ(https://packagist.org/packages/ec-cube/ec-cube)を見ると4.0.0というのがあるので、こっちの方が良いかも。

 

データベースをMySQLに指定

 

 ec-cubeというディレクトリが作成されます。

 ルートディレクりでプロジェクトを作成した場合は/ec-cubeにインストールされることになるので、必要なら調整。

 

 この後、たたくことになるec-cube/bin/consoleに実行権限を追加。

 

#bin/console eccube:install

 

 コマンドを実行すると対話が始まるので、まずデータベースを文字列で指定。

 MySQLの場合はこんな感じ。

 

[書式]mysql://<user>:<password>@<host>/<database name>

 

 対話ではほかにもいくつか質問が行われるが、すべてデフォルトで進めました。

 

インストール後の設定

 

 コマンドが終わるとEC-CUBEがインストールされています。

 そのままだとインストール先によってはmod_rewriteがうまく動かない場合があるのでインストールディレクトリの.htaccessにRewriteBaseを追加。

 

 http://{host}/~eccube4/ec-cube/の場合なら、

 

    RewriteBase /~eccube4/ec-cube/

 

 設定が終わったら管理ページにアクセスしてみる。デフォルトでは/admin/が管理ページのURLになっている(管理ページから変更可能)。

 ユーザーはID:admin/パスワード:passwordで作成されているので、ログイン後変更をおすすめ。

 


 Windows Subsystem for LinuxでEC-CUBE4を動かす方法その3です。

 今回はWebインストーラーを利用してEC-CUBE4をインストールします。

 

 EC-CUBE4のインストールは大きく、Web上で行う方法と、コマンドラインから行う方法の2つがあります。

 まずはWeb上からインストールする方法を紹介します。

 

 今回の投稿は長くなったので3回に分けて投稿されています。

Windows Subsystem for LinuxでEC-CUBE4を動かす その1(WSLインストール)

Windows Subsystem for LinuxでEC-CUBE4を動かす その2(LAMP環境構築) 

Windows Subsystem for LinuxでEC-CUBE4を動かす その3(Webインストーラー)

 

ドキュメントルート/ec4/にファイルを配置

 

 公式サイトからダウンロードしてきたeccube-4.0.0.zipをアップロードして解凍します。

 WindowsからLinuxへのファイルの転送はsshやFTPを使っても良いですが、Windows Subsystem for Linuxからは/mnt/cでWindows上のCドライブにアクセスできるので、直接コピーしてきてもOK。

 

 eccube-4.0.0というディレクトリが作成されるので、ec4と名前を変えて/var/www/html/ec4に配置。

 

 http://{Windows Subsystem for LinuxのIP}/ec4/にアクセスしてみます。

 下のようにインストールページが表示されればOK。

 

 

 何らかのエラーが表示されるならエラー内容を確認して修正。

 主に権限の問題でファイルが作成できないか、PHPのライブラリが足りない。

 

 404の場合は http://{Windows Subsystem for LinuxのIP}/ec4/index.php にアクセスしてみる。

 これで http://{Windows Subsystem for LinuxのIP}/ec4/index.php/install/step1 というようなURLになったら、mod_rewriteが機能していない。

 

 あとは403 Forbiddenが出たら権限を見直す。

 

 ここをクリアすれば、インストール完成は目前です。

 

Webインストーラーでインストールを進める

 

 「次へ進む」をクリックするとEC-CUBEの動作に必要なファイル・フォルダの権限をチェックします。

 下の画像のように「アクセス権限は正常です」と表示されればOK。

 

 表示されない場合は、表示に従い権限を変更します。

 

 続いて、サイトの設定を行います。

 店名やメールアドレスなどを設定します。

 メーラー、SSLは動かしていないのでとりあえず未記入で進みます。

 

 続いてデータベースの設定。

 今回はMySQLを利用するので以下のように入力します。

 

データベースの種類: MySQL

データベースのホスト名: 127.0.0.1

データベースのポート番号: (空欄)

データベース名: eccube4 (というデータベースをその2で作成したので)

ユーザー名: root

パスワード: (設定したパスワード)

 

 あとは設定することはないので、そのまま次へを進んで行きインストールを完了します。

 エラーが表示されず処理が完了したら、お店のフロントページと管理ページにアクセスしてみます。

 

 続いてコンソールからのインストールですが、そもそもコンソールから導入する人はこういう説明要らないんじゃないかなと思うので、気が向いたら・・・。


 Windows Subsystem for LinuxでEC-CUBE4を動かす方法その2です。

 今回はWindows Subsystem for LinuxにApache、PHP、MySQLを導入します。

 

 今回の投稿は長くなったので3回に分けて投稿されています。

Windows Subsystem for LinuxでEC-CUBE4を動かす その1(WSLインストール)

Windows Subsystem for LinuxでEC-CUBE4を動かす その2(LAMP環境構築)

Windows Subsystem for LinuxでEC-CUBE4を動かす その3(Webインストーラー)

 

apt-getの更新

 

 まずは apt-getを更新します。

 

  #sudo apt-get update
  #sudo apt-get upgrade

 

Apacheの導入

 

 続いてApacheをインストールします。

 

  #sudo apt-get install apache2
  #sudo service apache2 start

 

 ブラウザでアクセスしてページが表示されることを確認します。

 Apacheのバージョンは2.4.29がインストールされました。

# apache2 -version
Server version: Apache/2.4.29 (Ubuntu)
Server built:   2018-10-03T14:41:08

 

mod_rewriteを有効に

 

 EC-CUBE4はmod_rewriteを有効にする必要があります。

 

 コンフィグファイルで.htaccessを使えるようにします。

 

  # sudo vi /etc/apache2/sites-enabled/000-default.conf

 

        <Directory /var/www/html>
          AllowOverride All
        </Directory>

 

 mod_rewriteを有効にします。

 

   # sudo a2enmod rewrite
   # sudo service apache2 restart

 

PHPの導入

 

 続いてPHPを導入します。

 EC-CUBE4の要件はPHP7.1以上です(PHPのバージョンが低いとEC-CUBEのインストール時にバージョン不足がエラーとして表示されます)。

 ライブラリも一緒にインストール。必要なライブラリは公式のシステム要件で確認してください。依存関係で一緒に入ったライブラリなどもありますので、導入後に必要なライブラリが入っているか確認してみてください。

 

  # sudo apt-get install php
  # sudo apt-get install php-mysql 
  # sudo apt-get install php-devel
  # sudo apt-get install php-mbstring
  # sudo apt-get install php-pdo
  # sudo apt-get install php-xml
  # sudo apt-get install php-intl
  # sudo apt-get install php-zip
  # sudo apt-get install php-json
  # sudo apt-get install php7.2-curl

 

 シンプルな状態にしたいので推奨されているAPC(Alternative PHP Cache)はインストールしませんでした。

 Apacheを再起動して、適当なPHPファイルを作成して実行されることを確認します。

 

MySQLのインストール

 

 データベースはMySQLを利用することにします。

 

  # sudo apt-get install mysql-server
  # sudo service mysql start
  # sudo mysql -u root

 

  最後のmysqlコマンドもsudo付きなので注意してください。

 パスワードを指定しない状態のrootは要sudoです。

 

 MySQLに入って、rootのパスワードとデータベースを作成します。

 ちゃんとしたいならroot以外のユーザーを作るべきですが、今回は簡略。

 

   mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass';
   mysql > FLUSH PRIVILEGES;
   mysql > create database eccube4;

 

 mysql_native_password BY ‘pass’の「”」内は任意のパスワードを指定してください。

 

 これで最低限EC-CUBE4を動かす設定は完了です。

 (メールとかSSLは割愛)

 

 次回はようやくEC-CUBE4をインストールします。

 


 せっかくトライしたのでメモを残す。

 結論からいうと、私の環境では表示速度が遅かったので今後のパフォーマンス向上に期待という結果でした。

 

 今回の投稿は長くなったので3回に分けて投稿されています。

Windows Subsystem for LinuxでEC-CUBE4を動かす その1(WSLインストール)

Windows Subsystem for LinuxでEC-CUBE4を動かす その2(LAMP環境構築)

Windows Subsystem for LinuxでEC-CUBE4を動かす その3(Webインストーラー)

 

Windows Subsystem for Linuxとは?

 

 WindowsでLinux環境を構築できるサブシステム。

 Windows上からLinuxのファイルが覗けたり、その逆ができたりと便利かつアクロバティックな仕組み。

 XAMPPなどでLinuxを構築するより本番環境に近く、XAMPPからの乗り換えに期待・・・なんだけど、まだ途上感はある。

 

 そもそも「Unixに親和性が高いMac使おうぜ」というのがOSS開発者の最適解な気もするけど、Visual Studio無いから!

 

Windows Subsystem for Linuxをインストール

 

 「Windowsの設定」から「アプリ」をクリック。

 右側の項目「プログラムと機能」をクリック。

 コントロールパネルから「プログラムと機能」をダブルクリックしても同じ結果になります。

 

 左の「Windowsの機能の有効化または無効化」をクリック。

 

 「Windowsの機能の有効化または無効化」で「Windows Subsystem for Linux」にチェックを入れて有効にする。

 PCの再起動を促されたら、再起動する。

 これでWindows Subsystem for Linuxが有効になりました。

 

 次は実際にインストールするディストリビューションを選びます。

 今回は「Ubuntu」をインストールします。

 

 Microsoft Storeを立ち上げる。

 

 右上の「検索」から「Ubuntu」で検索。

 検索結果の一覧から「Ubuntu」をクリック。

 「インストール」をクリック。

 

 インストールが完了するとボタンが「起動」に代わるので起動をクリック。

 

 起動すると新しいユーザーとパスワードの設定を促されるので入力。

 ユーザー名とパスワードは忘れないように控えておく。

 

 これでWindows Subsystem for Linuxの導入は完了です。

 現時点でインストールされたUbuntuのバージョンは18.04.1 LTSでした。

 

 次回は、EC-CUBEを動かすためのLAMP環境を構築します。

 


 タイトルの通り、昨日公開されたEC-CUBEの最新版4.0.0をインストールしてみました。

 先に公開されていたRC版はAzureの仮想マシンで動かしていたので、今回はVirtualBoxのCentOS7で動かしてみる。

 

 まずは出来上がったページを見てみたいという方は管理ページもログインできるデモサイトが公式で公開されているので、そちらを参考にしてみてください。

 

 まずはシステム要件を確認しつつ、サーバーにLAMPを導入。

 推奨ライブラリはとりあえず入れずに動かしてみる。後で速度を比較してみよう。

 

 今回はeccube4というユーザーのユーザーディレクトリで動かしてみる。

 ユーザーディレクトリはオーソドックスにpublic_html以下とした。今回の場合は/home/eccube4/public_html/。

 

ソースファイルのアップロード・解凍

 

 EC-CUBE4のページからeccube-4.0.0.zipをダウンロードしてくる。

 (ダウンロードにはEC-CUBEメンバーのアカウントが必要です)

 

 ダウンロードしたファイルを/home/eccube4/以下にアップロード。

 

#unzip eccube-4.0.0.zip

 

 フォルダーの権限などは、そのまま特に変更しなくても解凍したままの状態でインストールできました。

 public_html以下にeccube-4.0.0というディレクトリができるので、これをpublic_htmlとリネーム。

 

RewriteBaseの変更

 

 ドキュメントルート直下ではなくユーザーディレクトリの/~eccube4/でアクセスするのでpublic_html直下の.htaccessにRewriteBaseの設定を追記。

 

    RewriteBase /~eccube4

 

Web上からインストール

 

 http://{ホスト}/~eccube4/ にアクセスすると、以下の画像のようにインストールページが表示されればOK。

 file not foundかつ http://{ホスト}/~eccube4/index.php にアクセスすると上記ページ(もしくはライブラリが足りないといったエラーページ)が表示されるならmod_rewriteが効いてないので設定を確認。

 

 権限が問題なければ以下のように「アクセス権限は正常です」と表示されます。

 チェックに引っかかったらそのディレクトリの権限を変更してください。

 店名、店舗用のメールアドレス、管理者アカウントの設定などを行います。

 

 データベースの設定を行います。

 

 

 あとはインストーラーの指示に従ってインストールを進めればOK。

 PHPのライブラリなどが足りない場合はインストールの流れでエラーになったり、ライブラリが足りない旨表示されるので、システム要件を確認しつつ足りないライブラリを導入。

 

 こんな感じでユーザーページ、管理ページが表示できました。