OpenPNE3.4.8

ざっくりとセットアップの内容をメモします。

3.4.8 というバージョンをダウンロードしました。

ファイル名はopenpne-OpenPNE3-OpenPNE-3.4.8-0-gb9d705e.zip

  1. zip ファイルを解凍して DOCUMENT_ROOT 以外の任意の場所に保存します。
  2. /usr/local/apache2/OpenPNE3 に解凍しました。

  3. OpenPNE.yml 作成
  4. $ cd /usr/local/apache2/OpenPNE3
    $ cp config/OpenPNE.yml.sample config/OpenPNE.yml
    $ vi config/OpenPNE.yml

    base_url と mail_envelope_from を環境に合わせたモノに変更しました。

  5. ProjectConfiguration.class.php 作成
  6. 特に変更せずデフォルトのままです。

    $ cp config/ProjectConfiguration.class.php.sample config/ProjectConfiguration.class.php
  7. DB 作成
  8. openpne3db という名前で作成しました。

    mysql> CREATE DATABASE open3db DEFAULT CHARACTER SET utf8;

    そして、openpne ユーザがパスワード openpne で接続できるようにユーザを作成しました。

    mysql> GRANT ALL ON *.openpne3db TO 'openpne'@'localhost' IDENTIFIED BY 'openpne';
  9. インストール
  10. 対話的形式でデータベースへの接続情報を設定をした後、色々と表示されますが、
    意味が分かりませんでした。

    $ ./symfony openpne:install
  11. web ディレクトリを公開ディレクトリから参照できるようにシンボリックリンクを作成
  12. 公開ディレクトリを /usr/local/apache2/htdocs として説明します。
    /sns というサブディレクトリに公開します。
    サーバ名を www.example.com とすると、URL は http://www.example.com/sns/ になります。

    $ cd /usr/local/apache2/htdocs
    $ ln -s ../OpenPNE3/web sns
  13. .htaccess 変更
  14. RewriteBase 変更

    $ vi web/.htaccess

    RewriteBase を /sns/ に変更しました。

  15. ブラウザからアクセス
  16. http://www.example.com/sns/

    ページは表示されますが、CSS が適用されていない状態です 😥
    apache の error_log を見たら DOCUMENT_ROOT 直下の opSkinBasicPlugin を
    参照している事が分かったので、DOCUMENT_ROOT に opSkinBasicPlugin/web へ
    のシンボリックリンクを作成しました。

    # cd /usr/local/apache2/htdocs
    # ln -s ../OpenPNE3/plugins/opSkinBasicPlugin/web opSkinBasicPlugin

    簡単に参照先を変更できるかと思ったのですが、調べても分からなかったのでシンボリックリンクで対応してしまいました。

  17. 再度ブラウザでアクセス
  18. CSS が適用されたデザインされたページになりました 🙂

    プリセットされているユーザでログインします。

    メールアドレス: sns@example.com
    パスワード: password

    すると今度は以下のエラー 😥

    現在、サーバが混み合っているか、メンテナンス中です。
    ご迷惑をおかけいたしますが、しばらく時間を空けて再度アクセスしてください。
     
    Currently, our service is too busy or is under maintenance.
    We're sorry and please retry accessing later.

    またまた apache の error_log を見ると以下が記録されていました。

    SQLSTATE[HY000]: General
     error: 2014 Cannot execute queries while other unbuffered queries are active.
    Consider using PDOStatement::fetchAll().  Alternatively, if your code is only ev
    er going to run against mysql, you may enable query buffering by setting the PDO
    ::MYSQL_ATTR_USE_BUFFERED_QUERY attribute., referer: http://www.example.com/sns/
    pc_backend.php/

    エラーメッセージのとおり、PDO::MYSQL_ATTR_USE_BUFFERED_QUERY を true
    にする必要があるようです。

    色々と調べたところ以下のファイルを変更したところ解決しました。
    (これで正しいのかわかりませんが 😎 )

    lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Mysql.php

    以下のように PDO::MYSQL_ATTR_USE_BUFFERED_QUERY を追加。

    public function connect()
         {
             $connected = parent::connect();
             $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
             $this->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
     
             return $connected;
         }

    これでとりあえず動くようになりました 🙂

    ※この対応方法は DB が MySQL の場合にのみ有効です