Phalcon Forum(Phosphorum)を動かしてみる
この記事はPhalcon Advent Calendar 2014の19日目です。昨日はyohgakiさんの「速いアプリケーションの作り方」でした。
Phalconの公式フォーラムのソースコードは公開されています。
今日はこのフォーラムを動かしてみたいと思います。
ソースコードのインストールと仮想マシンの作成
ソースコードは一部不具合がありましたので、forkして修正したものを使います。
$ git clone git@github.com:kenjis/phalcon-forum.git
vagrant-centos6-phpをcloneします。
$ cd phalcon-forum/
$ git clone git@github.com:kenjis/vagrant-centos6-php.git
vagrant-centos6-php/Vagrantfile
を変更します。
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -83,10 +83,10 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
#chef.add_recipe "phpmyadmin"
chef.add_recipe "git"
- #chef.add_recipe "beanstalkd"
+ chef.add_recipe "beanstalkd"
#chef.add_recipe "mongodb"
#chef.add_recipe "redis"
- #chef.add_recipe "elasticsearch"
+ chef.add_recipe "elasticsearch"
chef.add_recipe "phpunit"
chef.add_recipe "php-project"
@@ -94,7 +94,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Framework of your choice
#chef.add_recipe "codeigniter"
#chef.add_recipe "fuelphp"
- #chef.add_recipe "phalcon"
+ chef.add_recipe "phalcon"
#chef.add_recipe "yum-update"
仮想マシンを構築します。
$ cd vagrant-centos6-php/
$ vagrant up
GitHubの設定
GitHubにPhalcon Forum用のOAuth Applicationを登録します。
GitHubでSettingsからApplicationsを選び、Developer applicationsの「Register new application」ボタンを押します。
▼Phalcon Forum用の設定を入力します。
「Authorization callback URL」はhttp://localhost:8000/login/oauth/access_token/
と入力します。
▼登録が完了するとClient IDとClient Secretが表示されます。
Composerパッケージのインストール
仮想マシンにSSH接続し、Composerのパッケージをインストールします。
$ vagrant ssh
以下は仮想マシン上です。
[vagrant@localhost ~]$ cd phalcon
[vagrant@localhost phalcon]$ composer install
Phalcon Forumの設定
app/config/config.example.php
をapp/config/config.php
にコピーします。
$ cp app/config/config.example.php app/config/config.php
app/config/config.php
にデータベース接続、GitHubのApplication、SMTPサーバ、メールアドレスなどを設定します。
--- config.example.php 2014-11-29 10:28:57.000000000 +0900
+++ config.php 2014-12-17 19:09:53.000000000 +0900
@@ -30,7 +30,7 @@
'adapter' => 'Mysql',
'host' => 'localhost',
'username' => 'root',
- 'password' => '',
+ 'password' => 'root',
'dbname' => 'forum',
'charset' => 'utf8'
),
@@ -57,9 +57,9 @@
),
'github' => array(
- 'clientId' => '',
- 'clientSecret' => '',
- 'redirectUri' => 'http://pforum.loc/login/oauth/access_token/'
+ 'clientId' => '0a84ac3e3491d8ca1c50',
+ 'clientSecret' => '731710866a00fb65ee2250965ed5e53b5fe2095b',
+ 'redirectUri' => 'http://localhost:8000/login/oauth/access_token/'
),
'amazonSns' => array(
@@ -67,15 +67,15 @@
),
'smtp' => array(
- 'host' => "",
+ 'host' => "localhost",
'port' => 25,
- 'security' => "tls",
+ 'security' => "",
'username' => "",
'password' => ""
),
'beanstalk' => array(
- 'disabled' => true,
+ 'disabled' => false,
'host' => '127.0.0.1'
),
@@ -85,6 +85,6 @@
'mail' => array(
'fromName' => 'Phalcon',
- 'fromEmail' => 'phosphorum@phalconphp.com',
+ 'fromEmail' => 'MyAddress@example.jp',
)
));
データベースの作成
データベースforum
を作成し、テーブルを作成します。
[vagrant@localhost phalcon]$ echo 'CREATE DATABASE forum CHARSET=utf8 COLLATE=utf8_unicode_ci' | mysql -u root -proot
[vagrant@localhost phalcon]$ cat schemas/forum.sql | mysql -u root -proot forum
ダミーデータの挿入
ダミーデータをFakerで作成するスクリプトが付属していますので、実行します。
[vagrant@localhost phalcon]$ php scripts/random-entries.php
これで、ダミーデータが挿入されました。
http://localhost:8000/にアクセスしてみます。
▼Forumのトップページが表示されました。
ファンクショナルテスト
一応Codeceptionによるファンクショナルテストが付属していますので、実行してみます。
[vagrant@localhost phalcon]$ php codecept.phar run
Codeception PHP Testing Framework v2.0.8
Powered by PHPUnit 4.3.5 by Sebastian Bergmann.
Functional Tests (3) ---------------------------------------------------------------------------------------
Trying to reply in a discussion (ReplyInDiscussionCept) Ok
Trying to perform shadow login as first user (ShadowLoginCept) Ok
Trying to start a discussion (StartDiscussionCept) Ok
------------------------------------------------------------------------------------------------------------
Unit Tests (0) ------------------------------
---------------------------------------------
Time: 3.15 seconds, Memory: 23.50Mb
OK (3 tests, 8 assertions)
テストが通りました。
ログインしてみる
「Login with Github」ボタンを押して、ログインしてみます。
▼GitHubのアプリ承認ページに飛びました。
▼ログインできました。
メールの送信
Phalcon Forumでは、投稿通知のメール送信ジョブがBeanstalkdにキューイングされるようになっています。
Phalcon Forumの設定で、beanstalkd
のdisabled
をfalse
に変更しましたので、すでにダミーデータの挿入時の投稿がBeanstalkdにキューイングされています。
ジョブを処理するには以下のスクリプトを実行します。
[vagrant@localhost phalcon]$ php scripts/send-notifications-consumer.php &
これでメールがどんどん送信されます。
この仮想マシンではメールはすべてMailCatcherにキャッチされ、外部には一切送信されないようになっています。
http://localhost:1080/にアクセスすると、MailCatcherがキャッチしたメールを閲覧できます。
検索インデックスの作成
以下のスクリプトを実行すると、すべての投稿をElasticsearchにインデックスします。
[vagrant@localhost phalcon]$ php scripts/search-tasks.php
スクリプト実行中は、以下のようなインデックスされた情報が出力されます。
array(5) {
'_index' =>
string(10) "phosphorum"
'_type' =>
string(4) "post"
'_id' =>
string(8) "post-501"
'_version' =>
int(1)
'created' =>
bool(true)
}
これで、検索可能になりました。
▼「llc」という文字列を検索してみます。
▼検索されました。
この記事はPhalcon Advent Calendar 2014の19日目です。明日は、MiuraKatsuさんの「transifex - ボクがPhalcon翻訳プロジェクトでやらかしたコト」です。
関連
Date: 2014/12/19