2013年4月29日月曜日

[FuelPHP]FuelPHPのScaffoldで作成した画面をdotcloudにデプロイしてみた[dotcloud]

このエントリーをはてなブックマークに追加 はてなブックマーク - [FuelPHP]FuelPHPのScaffoldで作成した画面をdotcloudにデプロイしてみた[dotcloud]
Bloggerへの移行前のWordpressにて2013-01-12に投稿した記事です。

dotcloudにFuelPHPをデプロイした時のメモ。

前提

ローカル環境にはFuelPHPがインストールされている事。また、MySQLがインストールされている事。やり方が分からない人は以前のエントリ[FuelPHP]FuelPHPでMySQLに接続してScaffoldで画面作成した時のメモをご確認ください。

また、以下で確認を行いました。
  • FuelPHP1.5
  • MySQL
  • ローカル操作はMacOSX
  • dotcloudのCLIは0.9

目次

  1. ローカル環境でScaffold
  2. dotcloud利用の準備
  3. Welcomeページの表示
  4. Scaffoldで作成した画面の表示

1.ローカル環境でScaffold

以前のエントリでも実施しましたが、おさらいも兼ねて。

プロジェクトの作成をします。
$ cd ~/Site/
$ oil create blog
oilコマンドでScaffoldを実施します。
$ php oil g scaffold post title:varchar[255] summary:varchar[255] body:text
migrationを実行してDBにテーブルを作成します。
$ oil refine migrate 
この状態で「http://localhost/blog/public/post/」にアクセスします。するとScaffoldの画面が表示されるかと思います。

2.dotcloud利用の準備

dotcloudを利用する為にアカウント情報の登録とCLIのインストールを行って下さい。

dotcloud

CLI0.9のインストールをMacOSXで実施する際は以下の通りです。(Linux,Windowsの方法は公式Documentをご確認ください)
$ sudo easy_install pip && sudo pip install dotcloud
インストール実施後、以下のコマンドを実行し、dotcloudのログイン情報などを設定して下さい。
$ dotcloud setup

3.Welcomeページの表示

DB接続などが必要ないWelcome画面までをdotcloudで表示します。

まずは必要に応じてドキュメントファイルを削除します。(必須では有りません。)
$ cd ~/Site/blog/
$ rm *.md
$ rm -rf docs
次にdotcloudでアプリケーションを作成します。
下記例では「fuelphpapp」という名称のアプリケーションとしております。

アプリケーション名を別にした場合には以降の「fuelphpapp」としている箇所は自分の作成したアプリケーション名に置き換えて下さい。
$ dotcloud create fuelphpapp
アプリケーションが作成されたかを「dotcloud list」コマンドを利用してアプリケーション名一覧を取得して確認します。
$ dotcloud list
作成したアプリケーション名が表示されればOKです。

次にdotcloudにdeployする際に必須となる「dotcloud.yml」を新規に作成します。
このファイルにはどのサービスを利用するか、DocumentRootがどこかを指定します。
今回の場合、PHPを利用し、DBはMySQLを利用し、DocumentRootはpublicフォルダである事を記載します。
$ cd ~/Site/blog/
$ vi dotcloud.yml
www:
    type: php
    approot: public
db:
    type: mysql
最後にfuelphpappに接続し、ソースコードをpushします。
dotcloud connect fuelphpapp
dotcloud push
dotcloud pushコマンドが完了すると最後に本アプリケーションのアクセスURLが表示されるので、そのURLをブラウザで開きます。Welcome画面が表示されるかと思います。

URLについてはdotcloudのサイトにブラウザからアクセスしてログインを行っても確認出来ます。

4.Scaffoldで作成した画面の表示

dotcloudのWebサーバーはNginxのため、Nginxでrewriteルールを設定します。
nginx.confというファイルに設定を書く事でdotcloudで設定の読み込みを行ってくれます。
以下の通りファイルの新規作成を行います。

参考:FuelPHPをNginxで動かしてみる
$ vi public/nginx.conf
try_files $uri /index.php?$uri&$args;
次にMySQLにDB、ユーザー、テーブルを作成します。

利用しているサービスの内容を確認します。
$ dotcloud info
=== fuelphpapp
flavor:          sandbox
cost to date:    Free
+------+-------+------------+-----------------+
| name | type  | containers | reserved memory |
+------+-------+------------+-----------------+
| db   | mysql | 1          | N/A             |
| www  | php   | 1          | N/A             |
+------+-------+------------+-----------------+
DBの内容を確認します。
$ dotcloud info db
== db
type:            mysql
instances:       1
reserved memory: N/A
config:
  mysql_password:    *********
  mysql_masterslave: True
URLs:            N/A

=== db.0
datacenter:       Amazon-us-east-1c
service revision: mysql/1120eda9aa82 (latest revision)
ports:
  ssh:   ssh://mysql@fuelphpapp---------.azva.dotcloud.net:47618
  mysql: mysql://root
上記のようにDBの接続先やポート番号、rootパスワードなどが表示されます。
rootユーザーでDBに接続する場合は適宜メモを取って下さい。(本エントリではDBユーザーを新規に作成しております)

では、DBにリモートログインします。
$ dotcloud run db -- mysql
DBの作成と確認をします。
作成するDB名は「test_db」としています。
mysql>create database test_db default character set UTF8;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test_db            |
+--------------------+
3 rows in set (0.00 sec)
次にユーザーを作成し、確認します。
作成するユーザー名は「test_db」としまいます。パスワードを記載する「******」の箇所は適宜変更して下さい。
mysql>GRANT ALL ON test_db.* TO 'dbuser'@'%' IDENTIFIED BY '******';
mysql> select host,user from mysql.user where user='dbuser';
+------+--------+
| host | user   |
+------+--------+
| %    | dbuser |
+------+--------+
1 row in set (0.00 sec)
最後にtableを作成し確認します。
mysql> use test_db
Database changed
mysql> CREATE TABLE posts
    -> (
    -> ID INT(11) NOT NULL AUTO_INCREMENT,
    -> TITLE VARCHAR(255) NOT NULL,
    -> SUMMARY VARCHAR(255) NOT NULL,
    -> BODY TEXT NOT NULL,
    -> CREATED_AT INT(11) NOT NULL,
    -> UPDATED_AT INT(11) NOT NULL,
    -> PRIMARY KEY (ID)
    -> );
Query OK, 0 rows affected (2.00 sec)

mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| posts             |
+-------------------+
1 row in set (0.00 sec)
最後にDB接続情報を記載する「db.php」をdotcloudの情報に合わせます。
こちらはUbuntu 12.04 にて dotCloud の MySQL を試してみる (PHP編)を参考にさせて頂きました。

なお、パスワードの「*******」の箇所は適宜変更ください。
vi fuel/app/config/development/db.php
<?php
/**
 * The development database settings. These get merged with the global settings.
 */
$filepath = $_SERVER['HOME'].'/environment.json';
$env = json_decode(file_get_contents($filepath), true);
$host = $env['DOTCLOUD_DB_MYSQL_HOST'];
$port = $env['DOTCLOUD_DB_MYSQL_PORT'];
$dbname = 'test_db';
$dsn = 'mysql:host='.$host.';port='.$port.';dbname='.$dbname;

return array(
 'default' => array(
  'connection'  => array(
            'dsn'   => $dsn,
   'username'   => 'dbuser',
   'password'   => '*******',
            'persistent'  => false,
            'compress'  => false,
  ),
 ),
);
上記設定ファイル例では接続先情報についてはdotcloudの各種設定が記載された「environment.json」をパースし、$dsnとして設定しております。

ファイルを確認し、直接書く事も可能ですが、私はコピペミスをしてDBに接続出来ない!という事があったので、上記のようなファイルから値を取得し、反映させる方法が確実かと思います。

最後に再度ソースコードをpushします。
dotcloud push
「http://[hostname]/post/」というようにブラウザに入力するとScaffold画面が表示されるかと思います。
長い文章になってしまいました、お疲れ様でした。

なお、上記のままだとローカルのFuelPHPが動かなくなってしまうので、ローカルとdotcloudの環境を分けると良いかと思います。(localhostは\Fuel::DEVELOPMENT,dotcloudは\Fuel::PRODUCTIONなど。) 

[PHP]32bitマシンでPHPの日付を利用する場合の注意点

このエントリーをはてなブックマークに追加 はてなブックマーク - [PHP]32bitマシンでPHPの日付を利用する場合の注意点
修正に半日も使って面倒だったのでメモ。

32bitのPHPでUNIXタイムスタンプを利用するdate,mktime,strtotime関数を利用して2038年を超えるような日付を扱おうとすると桁あふれになってしまい、1970年1月1日として扱われてしまいます。(2038年問題)

その場合PHP5から利用可能なdate_create,date_format関数などを利用すれば桁あふれなく対応が可能です。日付の計算はdate_add,date_subが利用出来ます。また、Datetime同士での比較も可能です。
// 現在の日付を規定フォーマットで表示
$now = date_create('now');
echo date_format($now, 'Y-m-d H:i:s');

// 2000年1月20日の10日前の日付を取得
$date = new DateTime('2000-01-20');
$date-&gt;sub(new DateInterval('P10D'));

// 比較
if($now &gt; $date)
{
  //こちらに遷移
}

PHP知っている人からすると「こんな事も知らないのかよ」ってつっこみができそうですが。。。

[FirefoxOS]WebアプリをFirefoxMarketplaceにFirefoxOS用アプリとして登録した時のメモ

このエントリーをはてなブックマークに追加 はてなブックマーク - [FirefoxOS]WebアプリをFirefoxMarketplaceにFirefoxOS用アプリとして登録した時のメモ
Bloggerへの移行前のWordpressにて2013-03-01に投稿した記事です。

昨年度、jQueryMobileで簡単なWebアプリを作ってHerokuにデプロイしており、それをFirefoxOS用のアプリとして登録してみた時のメモ。
なお、申請まではできましたが、承認はされてないので間違ってる所もあるかもしれませんが、ご了承ください。

目次

  1. 2種類の申請方法について
  2. とりあえずFirefoxOSのエミュレーター入れる
  3. Firefox Marketplaceのログイン情報作成
  4. App Manifestファイルの作成
  5. App Manifestファイルの確認
  6. 申請
  7. 最後に

1.2種類の申請方法について

そもそもアプリの申請方法として大きく分けて2種類が有るようです。

1.Hosted
普通のWebアプリで、HTML,CSS,画像ファイルなどはサーバーに配置します。ただ、それ以外の準備としてアプリの情報を記載したApp Manifests(後述)の作成及びサーバーへの配置が必要です。また、128x128のアイコンも必須となります。なお、FirefoxOSのアプリとして配布する場合、上記Webアプリはモバイルに最適化されていないとアプリ審査時にrejectされてしまうような記述が有りました。
今回はこちらで申請をやってみました。

2.Packaged
こちらはWebアプリケーション(HTML,CSS,画像ファイルなど)をZIP化?してマーケットにアップするようです。詳細はやってないので、分かりませんがこちらもmanifestファイル、画像ファイルなどの作成は必要なようです。

2.とりあえずFirefoxOSのエミュレーター入れる

必須ではないですが、最終的にアプリ申請する際にモバイル用画面として開発されている事という記載も有り、一応FirefoxOSでの動きをみる為にエミュレーターをインストールする。
ただ、これはとても簡単でFirefoxのAdd-onとして追加すればOK。

こちらのサイトをFirefoxで表示し、各OSのボタンクリックでOK。
Add-Onでインストール後、「ツール」→「Web開発」→「Firefox OS Simulator」で以下の画面が表示される。(インストール後は自動でこの画面に遷移)
で左の「Simulator」を「Start」にすれば起動する。
これでブラウザを起動して自分のサイトがモバイル端末でも正しく動作するかを確認しておくと良いかと思います。

3.Firefox Marketplaceのログイン情報作成

こちらのサイトに遷移し、Mozila Personaのログイン情報を登録すればOK。メールアドレス、パスワードのみの入力でよかったはず。

4.App Manifestファイルの作成

詳細は以下に記載があります。

アプリマニフェスト

以下のようなファイルを作成し、拡張子は.webappとします。
{
  "name":"My App",
  "description": "My elevator pitch goes here",
  "launch_path": "/",
  "icons": {
    "128": "/img/icon-128.png"
  },
  "developer": {
    "name": "Your name or organization",
    "url": "http://your-homepage-here.org"
  },
  "default_locale": "en"
}
各要素の詳細は上記サイトをみて頂ければと思いますが、注意点としてはlaunch_pathです。

こちらに記載したパスがアプリ起動時に読み込まれるパスとなります。launch_pathに関する詳細はこちらにありますが、私の場合http://musi9festagram.herokuapp.com/というようにWebサーバーのルートにあるので、launch_pathは/としました。
http://hoge/mywebapp/等の場合、launch_pathは/webapp/とします。

また、iconsの128の箇所に指定したパスに128x128の画像もサーバーに配置する必要が有ります。

さらに追加で注意点があります。
本ファイルはContent-Typeをapplication/x-web-app-manifest+jsonとして返却する必要があります。Apacheなどの場合、.htaccessに追記してね、みたいな例が書いてありましたが、Herokuでのやり方がよく分からないし、面倒そうだったのでプログラム側で生成してContent-Typeを指定して返却させてみました。特にこれでも問題なさそうですが、静的ファイルの方が楽そうですね。

5.App Manifestファイルの確認

作成したManifestファイルをサーバーにアップロードしたら、ファイルの内容が正しいかをValidationツールを利用して確認します。

Validate an App
上記画面に遷移し、manifestファイルがあるURLを入力し、Validateボタンを押せば、チェック処理が実施されます。
問題なければエラーが無い旨が表示されますし、NGの場合にはその理由が表示されます。(アイコン画像がない、Content-Typeが正しくないなど詳細に表示されます)

ここが通らないと申請もできないようなので、ここで事前にチェックしましょう!

6.申請

最後に申請です。

Submit an App
上記を画面を表示し、Device TypeではFirefox OSを選択し、画面下部ではmanifestファイルのURLを指定します。

その後、画面キャプチャやらアプリ名やら入力します。
本当はそのサイトの画像も貼りたかったのですが、manifestファイルが重複してるよってエラーが出たので駄目でした。。。そりゃそうなのですが。
まあ、ここはそこまではまるような入力項目は無かったかと思います。

上記が終わって少し立つとレビュー中となりました。(This app is awaiting review)
どうやら申請が終わると予め登録したメールに何かしら連絡が来るようです。申請して丸一に経過したけどいつ終わるのかしら。

7.最後に

まだ申請完了してないので何とも言えませんが、既にモバイル用のサイトが有れば申請はそれほど大変ではないかと思います。manifestファイルを返却するときにContent-Typeが決まってるってのがちょっと面倒ですが、それ以外はわりとさくっとできます。
各ドキュメントが日本語でもあったり、validationツールなど揃っているのが素敵です。

とりあえず承認待ってみます!

5月27日追記
完全に更新するの忘れてましたが、申請して2、3週間程度で承認されました。(厳密には申請チェックから漏れていた?らしく連絡がないのでTwitterで連絡して催促しました)

musi9festagram

まあ、で?というアプリでは有りますが、一通りリリースまで出来たのは良い経験になったかなーと。

[FuelPHP]設定ファイルの使い方

このエントリーをはてなブックマークに追加 はてなブックマーク - [FuelPHP]設定ファイルの使い方
Bloggerへの移行前のWordpressにて2013-02-19に投稿した記事です。

DBヘの接続情報だとかFuelPHPを使う上で必要なファイルはapp/config/config.phpというファイルがあるのですが、プロジェクトでオリジナルの設定が必要な場合が有ると思います。例えば
  • 画面の一部の文言
  • ファイルのパス
  • 外部API取得先のURL及びID、パスワワード
というものが挙げられると思います。(実際私の場合はこんな感じでした)

上記についてFuelPHPではConfigクラスがあり、こちらを利用することで簡単に対応ができます。

ファイル形式

公式のドキュメントを見ると1.5現在では以下の種類のファイルが利用出来ます。
  • PHPのarray形式(.php)
<?php

return  array(
'api' => array(
 'url' => 'http://hoge.com',
 'id' => 'id',
 'password' => 'pass'
 ),
);
  • ini形式(.ini)
  • [api]
    url = 'http://hoge.com'
    id = 'id'
    password = 'pass'
    
  • YAML形式(.yml)
  • api:
     url: http://hoge.com
     id: id
     password: pass
    
  • JSON形式(.json)
  • {
    "api" :
        {
            "url": "http://hoge.com",
            "id": "id",
            "password": "pass"
        }
    }
    
    私の場合、開発者以外の人も扱う可能性があったのでini形式で利用しました。個人的にはPHPのarray形式が一番しっくりきそうな気がします。
    

    読み込み方

    こちらのサイトを参考にさせて頂きました。
    大きく分けて手動でやる方法と自動でやる方法があります。自動でやる場合、予め設定ファイルにどのファイルを読み込むかを設定しておきます。
    
    hoge.iniという設定ファイルを自動で読み込む場合、app/config/config.phpに以下のように追記を行います。なお、下記例の場合にはhoge.iniはapp/config配下に配置します。
    
    return array(
    'always_load'  => array(
     
      'packages'  => array(
          'orm',
          'auth',
      ),
     'config' => array(
      'hoge.ini' => null,
     ),
    ),
    
    2つの設定ファイルを読み込む場合、configのarrayに追加すればOKです。 手動で読み込む場合にはConfig::load('hoge.ini')というように明示的に読み込むファイルを指定します。

    プログラム内での利用の仕方

    今回の例の場合、以下のように利用可能です。
    
    $url = Config::get('api.url')
    
    これで取得出来ます。
    また、仮に値が取得出来なかった場合(指定行がコメントアウトされていたなど)のデフォルト値の設定も可能です。
    
    $url = Config::get('api.url','http://fuga.com')
    
    最初に例で示したファイルであれば上記の方式で取得が可能である事を確認しました。
    
    Configクラスは他にもset,deleteメソッドなどもあるのでPHPUnitで試験をする際に使うと便利そうですね!
    

    [FuelPHP]MacOSXでFuelPHP環境構築してDB接続設定後、Scaffoldで画面作成した時のメモ

    このエントリーをはてなブックマークに追加 はてなブックマーク - [FuelPHP]MacOSXでFuelPHP環境構築してDB接続設定後、Scaffoldで画面作成した時のメモ
    Bloggerへの移行前のWordpressにて2013-01-12に投稿した記事です。
    
    前回のエントリではMac環境でFuelPHPでWelocme画面を表示するまでの説明を記載しました。
    今回は前回の続きでScaffoldを利用して自動で画面を作成します。
    

    目標

    Scaffoldを利用して画面が作成出来る事。
    
    Scaffoldにより、DBのテーブルに対応した一覧表示、新規登録、編集、詳細情報表示、削除に対応した画面及び機能を自動で作成します。
    

    ソフトウェア構成

    • Mac OSX 10.8.2
    • [前回のエントリでインストール済み]FuelPHP 1.4
    • [前回のエントリで設定済み]Apache
    • [前回のエントリで設定済み]PHP 5.3.15
    • Pear(インストーラーを利用)
    • MySQL(homebrewによるインストール)

    目次

    1. MySQLのインスール、DB作成、ユーザー作成、テーブル作成
    2. Pearのインストール
    3. pdo_mysqlの設定変更
    4. FuelPHPのDB接続設定
    5. Scaffoldの実施と設定変更

    1.MySQLのインスール、DB作成、ユーザー作成、テーブル作成

    FuelPHPに接続するDBにはMySQLを利用します。PostgreSQLでの接続も可能ですが、Scaffoldをやってみると削除処理が失敗するなどの事象が発生したので、基本はMySQLで利用するのが良いと思われます。
    

    1-1.MySQLのインストール

    MySQLはhomebrewを利用してインストールします。
    
    $brew install mysql
    
    基本的にはこちらのサイト(HomebrewでMySQLをインストールする時に知っておきたいこと)を参考に実施しました。
    
    また、上記のサイトにある以下を実施しました。
    
    • データベースとユーザーの設定
    • 起動スクリプトの設定
    上記実施により、MySQLのrootユーザーが出来たと思うので、そのユーザーを利用して以下を実施します。
    
    • DBの作成
    • DB操作のユーザー作成
    • 試験用のテーブル作成

    1-2.DBの作成

    MySQLへのログインし、DBの作成を行います。
    下記例ではDB名をtest_dbとしていますが、適宜必要に応じて変更して下さい。
    
    $mysql -u root -p
    Enter password:(設定したrootのパスワードを入力)
    mysql>CREATE DATABASE test_db DEFAULT CHARACTER SET utf8;
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    | test_db            |
    +--------------------+
    5 rows in set (0.01 sec)
    
    1行目ではrootユーザーでパスワード認証を利用し、MySQLにログインします。
    2行目でtest_dbというDB名を文字コードをUTF-8として作成します。
    3行目で先ほど作成したDBが登録されているかをshow databasesコマンドを利用して確認します。正常に登録が出来た場合、test_dbが存在する事が確認出来ます。
    

    1-3.DB操作のユーザー作成

    次にFuelPHPからMySQLへ接続する際のユーザーを個別に作成します。
    以降のコマンドは既にrootユーザーでMySQLへ接続した状態とします。
    なお、下記例ではユーザー名「dbuser」、パスワードを「dbpass」として作成しますので、必要に応じて適宜変更下さい。
    
    mysql>grant ALL PRIVILEGES on test_db.* to dbuser@'localhost' IDENTIFIED BY 'dbpass' with grant option;
    mysql> SELECT host,user FROM mysql.user where user='dbuser';
    +-----------+--------+
    | host      | user   |
    +-----------+--------+
    | localhost | dbuser |
    +-----------+--------+
    1 row in set (0.00 sec)
    mysql>exit
    $mysql -u dbuser -p
    Enter password:(設定したdbuserのパスワードを入力)
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | test               |
    | test_db            |
    +--------------------+
    3 rows in set (0.01 sec)
    
    1行目ではtest_dbに対して全ての権限(select、insert,deleteなど)を付与したユーザーを作成します。
    なお、上記ユーザーはlocalhostからの接続のみ可能となっているため、FuelPHPが動作するWebサーバーとMySQLのサーバーが別となる場合には別途設定が必要です。
    2行目ではSQLを発行し、ユーザーが登録されたか確認します。where user='dbuser'を削除すると全てのユーザーが表示されます。
    3行目以降では一度rootユーザーでログアウトを行い、作成したユーザーでMySQLでのログインを実施します。最後にshow databasesコマンドでtest_dbが表示される事を確認します。
    

    1-4.試験用のテーブル作成

    最後に試験用のテーブルを作成します。
    
    mysql -u dbuser -p test_db
    Enter password:(設定したdbuserのパスワードを入力)
    mysql> 
    CREATE TABLE POSTS
    (
     ID INT(11) NOT NULL AUTO_INCREMENT,
     TITLE VARCHAR(255) NOT NULL,
     SUMMARY VARCHAR(255) NOT NULL,
     BODY TEXT NOT NULL,
     CREATED_AT INT(11) NOT NULL,
     UPDATED_AT INT(11) NOT NULL,
     PRIMARY KEY (ID)
    );
    mysql> show tables;
    +-------------------+
    | Tables_in_test_db |
    +-------------------+
    | posts             |
    +-------------------+
    1 row in set (0.00 sec)
    
    1行目ではDB名test_dbを利用することとして、ログインします。ログイン時にDBを指定しなかった場合、use (DB名)と入力する事でDBの切り替えが可能です。
    2行目では試験用のテーブルを作成します。なお、Scaffoldを利用する場合id,created_at,updated_atカラムは必須となります。
    3行目ではshow tablesコマンドでテーブルの作成を確認します。
    

    2.Pearのインストール

    oilコマンドを利用してScaffoldを利用する際にPearを利用したため、インストールを行います。(Macでも必要かの確認は行っていませんが、winでは必要だった為、インストールしています。)
    
    こちらのサイト(Mac OS X LionでPEARをインストールする方法)を参考にインストールさせて頂きました。
    
    詳細については割愛しますが、特にはまることはないかと思います。
    

    3.pdo_mysqlの設定変更

    php.iniでMySQLへの接続時に利用するsocketファイルの記述がありますが、デフォルトの設定とhomebrewでインストールした時に配置されるファイルの位置が違うため、変更します。
    
    私の場合、private/tmp/mysql.sockに存在しましたが、以下のようなコマンドでどこに存在するか確認出来るかと思います。
    
    $sudo find / -name mysql.sock
    
    上記で確認後、php.iniを変更。
    
    $sudo vi /etc/php.ini
    
    ;pdo_mysql.default_socket=/var/mysql/mysql.sock
    →pdo_mysql.default_socket=/private/tmp/mysql.sock
    

    4.FuelPHPのDB接続設定

    FuelPHPからMySQLへ接続する為の設定を行います。
    (以前のエントリ通り、~/Site/配下にblogというプロジェクトを作成した想定。)
    
    $vi ~/Sites/blog/fuel/app/config/development/db.php
    
    return array(
        'default' => array(
            'connection'  => array(
                'dsn'        => 'mysql:host=localhost;dbname=test_db',
                'username'   => 'dbuser',
                'password'   => 'dbpass',
            ),      
        ),      
    );
    

    5.Scaffoldの実施と設定変更

    ScaffoldではORMを利用する為、config.phpを変更してORMを有効化します。
    
    $vi ~/Sites/blog/fuel/app/config/config.php
    
    return array(
    'always_load'  => array(
     
                    'packages'  => array(
                        'orm',
                    ),  
    ),
    
    );
    
    準備が整ったので、いよいよScaffoldを利用します。
    以下のようにテーブルのカラム名、型を記載する事で自動でModel,View,Controllerを生成します。
    
    $cd ~/Sites/blog/
    $php oil g scaffold post title:varchar[255] summary:varchar[255] body:text
    
    上記を実施後、以下のURLでブラウザにアクセスします。
    
    http://localhost/blog/public/post/
    
    上記により、一覧画面が表示されます。
    
    一覧画面
    
    追加画面
    詳細表示画面
    編集画面
    ページング機能などは無いため、必要な場合には別途Paginationクラスを利用して作成します。
    
    とりあえず以上になります。
    お疲れ様でした! 
    

    [FuelPHP]MacOSXでFuelPHP環境構築してWelcomeページまで表示した時のメモ

    このエントリーをはてなブックマークに追加 はてなブックマーク - [FuelPHP]MacOSXでFuelPHP環境構築してWelcomeページまで表示した時のメモ
    Bloggerへの移行前のWordpressにて2013-01-11に投稿した記事です。
    
    FuelPHPをMacで利用出来るようにした際のメモ。
    

    目標

    以下のようなWelocmeページが表示出来ること。(Apache、PHPの設定)
    
    また、以下のようにScaffoldを利用した画面が表示出来る事。(MySQLの設定)
    
    ただし、疲れたのでとりあえずはWelcomeページまでの表示について本エントリでは記載します。(DB接続、Scaffoldの話は次のエントリを予定)
    

    ソフトウェア構成

    • Mac OSX 10.8.2
    • FuelPHP 1.4
    • Apache(デフォルトインストールされているものを利用)
    • PHP 5.3.15(デフォルトインストールされているものを利用。FuelPHPは5.3以上が必須。)
    • [今回未記載]Pear(インストーラーを利用)
    • [今回未記載]MySQL(homebrewによるインストール)

    目次

    • 1.PHPの確認
    • 2.Apacheの設定
    • 3.php.iniの変更
    • 4.FuelPHPのインストール

    1.PHPの確認

    PHPがインストールされている事を確認します。
    また、FuelPHPはPHP5.3以上の必要があり、それも合わせて確認します。
    
    $php --version
    
    これでバージョンが表示されます。バージョンが5.3以上であればOKですが、違う場合には別途PHPをインストールする必要があります。
    

    2.Apacheの設定

    Apacheは既にインストール済みとなっているため、これを利用します。別途Apacheをインストールした場合には、パスなどは適宜環境に応じて置き換えて設定して下さい。
    
    httpd.confを編集しますが、編集ミスとなったときに復旧出来るように予めコピーしておきます。
    
    $sudo cp /etc/apache2/httpd.conf /etc/apache2/httpd.conf.old
    
    httpd.confでは以下の設定を行います。
    
    • PHPの有効化
    • DocumentRootの変更("/Users/(ユーザー名)/Sites/"に変更する)
    • mod_rewriteの有効化(やっとかないとindex.phpをURLに付けなければいけなかったり色々面倒)
    最初にモジュールにmod_rewriteがあるか確認します。
    
    $httpd -M
    
    mod_rewrieがあれば早速編集します。
    $sudo vi /etc/apache2/httpd.conf
    
    #mod_rewriteの有効化を確認。自分の環境ではデフォルトで有効化されていた
    LoadModule rewrite_module libexec/apache2/mod_rewrite.so
    
    #PHPの有効化
    #LoadModule php5_module libexec/apache2/libphp5.so
    →LoadModule php5_module libexec/apache2/libphp5.so
    
    #DocumentRootの変更(toshihiro308の部分はユーザー名のため、適宜環境に合わせる)
    #DocumentRoot "/Library/WebServer/Documents" 
    →DocumentRoot "/Users/toshihiro308/Sites/"
     
    #.htaccessの有効化
    #AllowOverride None
    →AllowOverride All
    
    ユーザー名.confも同じく編集。
    $vi /private/etc/apache2/users/toshihiro308.conf
    
    #AllowOverride None
    →AllowOverride All 
    
    Apacheの再起動
    $sudo apachectl stop
    $sudo apachectl start
    
    これで準備OKのはずです。 まずはPHPの有効化を確認します。 設定したDocumentRoot配下に以下のファイルを配置します。
    $ vi ~/Sites/test.php
    
    <?php
    phpinfo();
    ?>
    
    以下のURLにブラウザでアクセスします。
    http://localhost/test.php
    
    PHPのバージョン情報などが表示されればOKです。
    
    次にmod_rewriteが有効になっているか確認します。
    こちらのサイト(mod_rewrite を使いこなす (初級) – part2)に確認用のPHPが記載されているので、これを利用して確認します。
    また、NGとなる場合にはこちらのサイト(ZendFramework奮闘記Vol.1【mod_rewriteに泣く】)も読んでいただけると解決するかと思います。
    

    3.php.iniの変更

    FuelPHPでlogを記載する際にtimezoneを利用するようですが、デフォルトだとコメントアウト状態になっていおり、この状態だとエラーとなるため変更をします。
    
    $sudo vi /etc/php.ini
    
    ; http://php.net/date.timezone
    →date.timezone ="Asia/Tokyo"
    

    4.FuelPHPのインストール

    FuelPHPのインストールを実施します。
    インストールの方法としてcurlを利用する方法(MacもしくはLinux)と直接本体をダウンロードする方法がありますが、今回はcurlを利用して実施します。
    
    公式ドキュメント通りに以下を実施。
    
    $ curl get.fuelphp.com/oil | sh
    $ cd ~/Sites/
    $ oil create blog
    
    1行目のコマンドでFuelPHPインストールします。2,3行目で先ほど設定したDcoumentRoot配下にblogというプロジェクトを作成しています。
    
    このあと以下にアクセスすればWelcomeページがみれるはずです。
    http://localhost/blog/public/
    
    なお、デフォルトでblog/publicフォルダ配下には.htaccessが存在する事が確認でき、上記でURLでのアクセスが可能になるはずです。
    次のエントリでは、FuelPHPでDB接続を行い、scaffoldで出力した画面まで表示する方法を記載します。多分。。
    

    2013年4月28日日曜日

    [grails]BuildConfig.groovyに指定可能なプロパティの動作を確認してみた

    このエントリーをはてなブックマークに追加 はてなブックマーク - [grails]BuildConfig.groovyに指定可能なプロパティの動作を確認してみた
    Bloggerへの移行前のWordpressにて2012-12-29に投稿した記事です。
    
    仕事の一貫でGrailsの18.Deploymentを和訳する作業があったが、BuildConfig.groovyに記述できる3つのプロパティの説明がどうしても英文だけだと理解しづらい所があったため、それぞれ実際の挙動を確認したので、そのメモ。
    

    検証する際の条件

    2 Getting Startedにならい、Helloworldアプリケーションを作成。なお、以降では Helloworldアプリケーションが存在するディレクトリは$HELLO_WORLD_DIRとする。
    $HELLO_WORLD_DIR/grails-app/conf/BuildConfig.groovyに各オプションを指定し、
    grails war
    コマンドを実行。warは作成後、解凍して中身を確認する。Grailsのバージョンは2.1.1

    調査したプロパティ

    18.Deploymentのドキュメントに記載例のあった以下の3つの挙動を確認。
    1. grails.war.dependencies
    2. grails.war.copyToWebApp
    3. grails.war.resources

    1.grails.war.dependencies

    1-1.プロパティの概要

    warファイルに含めるライブラリ(jar)を指定出来る。

    1-2.プロパティを指定しない場合の挙動

    Grails自身が動作する為に必要なライブラリがwarファイル解凍後のWEB-INF/lib配下に配置されている。具体的にはHibernate、Spring、Log4jなどなど。

    1-3.プロパティを指定した場合の挙動

    BuildConfig.groovyに以下を追加。
        def deps = [ 
          "groovy-all-*.jar"
        ]   
      
        grails.war.dependencies = { 
            fileset(dir: "libs") {
               for (pattern in deps) {
                  include(name: pattern)
               }   
            }   
        } 
    
    また、上記の場合、$HELLO_WORLD_DIR/libsというディレクトリを作成し、「groovy-all-1.8.8.jar」を配置する。
    
    上記設定後、コマンドを実行するとWARファイル解凍後のWEB-INF/lib配下にはgroovy-all-1.8.8.jarのみがある。
    
    つまり、Grailsに必要なライブラリすらないので、tomcatなどに配置しても動かないと思われる。このオプションを使う場合、最低でもGrailsに必要なライブラリはdef depsで指定する必要がある。
    
    このプロパティはGrailsに必要なデフォルトでインクルードされるライブラリとアプリケーション個別でインクルードしたいライブラリの競合を避けると原文にも書いてある為、このような挙動だと考えられる。
    
    なお、原文ではGrailsに最低限必要なライブラリ郡は「$GRAILS_HOME/dependencies.txt」を見ると良いよって書いてあるが、ここに書いてあるものと本当にインクルードするjarのバージョンが違ったりするので、あまり当てにならない。。。(Grails2.2.0ではdependencies.txtは見当たらない。。)
    

    2.grails.war.copyToWebApp

    2-1.プロパティの概要

    $HELLO_WORLD_DIR/web-app配下のどのファイルをwarに含めるかを指定する。
    

    2-2.プロパティを指定しない場合の挙動

    特に指定がない場合には$HELLO_WORLD_DIR/web-app配下のファイルは全てWARに含まれる。
    
    Helloworldアプリケーションでwarファイルを作成した場合、以下のフォルダが存在する。
    
    • META-INF
    • WEB-INF
    • css
    • images
    • js
    • plugins
    なお、仮にweb-app配下に独自で作成したディレクトリを配置した場合にはそのディレクトリもwarには含まれる。例えばweb-app配下にcontentディレクトリを配置した場合、作成されるwarにはcontentディレクトリも存在する。
    

    2-3.プロパティを指定した場合の挙動

    BuildConfig.groovyに以下を追加。
       grails.war.copyToWebApp = { args ->
           fileset(dir:"web-app") {
              include(name: "js/**")
              include(name: "WEB-INF/**")
           }     
        }
    
    とした場合には以下のディレクトリが存在するようになる。
    • META-INF
    • WEB-INF
    • js
    • plugins
    つまり、META-INF及びpluginsは特に指定を行わなくても必ずディレクトリが存在し、それ以外はcopyToWebAppで指定したファイルのみが含まれるような挙動となる。
    
    使い方としては、例えば試験サーバーには試験用のコンテンツがweb-app配下に存在するがwar作成時には含めたくない、等の場合に利用すると便利だと思われる。
    

    3.grails.war.resources

    3-1.プロパティの概要

    warファイル作成前に実施したい処理を記述出来る。例えば、開発時には必要ないファイルだが、商用の時には必要なファイルを配置する、など。

    3-2.プロパティを指定しない場合の挙動

    特に何もしない。概要をみれば、そりゃそうだ、という所である。

    3-3.プロパティを指定した場合の挙動

    BuildConfig.groovyに以下を追加。
        grails.war.resources = { warLocation ->
            copy(todir:"$warLocation/WEB-INF") {
                    fileset(dir:"my/config/", includes:"*.xml")
            }          
        }
    
    これでwarを作成すると$HELLO_WORLD_DIR/my/config/配下に配置した*.xmlという名称のファイルがWEB-INF/配下に配置されている。