FuelPHPサイド
FeulBenas 26 : サーバーへアップアップ
実働のサーバーへどうやってあげるのか、その一例です。
FuelPHPで作成する規模のWebアプリであれば、複数の技術者が数ヶ月かけて作成すると言うよりは、一人でぱぱっとスクラッチを起こして、ひと通りの動きが見せられるまで数分から、数時間。後の作りこみは規模やレベルよって違うが、数日から一ヶ月程度の、高速開発されることが多いでしょう。
そうした高速スクラッチャーを目指している、初心者の方々に、初めの数歩くらいまでのところを教えるのがこのチュートリアルの目的です。
スキャフォールド(FuelPHP日本語版の表記に合わせています)は確かに便利ですが、ある程度FuelPHPで組んでいる方なら、スキャフォールドで生成するより、既に書いたコードを最利用することでしょうね。多分、そのほうが速いでしょうから。
こうした観点で考えると、このチュートリアル、毎回何を書こうかと悩みます。その末に思いついたのが、実際のサーバーの載せ方です。なにせ、FuelPHPの場合、解凍したフォルダー構成のまま、アップロードするのは、セキュリティ的にもよくありませんし、publicというサブフォルダーになってしまうのも見場が悪いですからね。
フォルダーの構成です。まず、Fuel下のapp、core、packagesはドキュメントルートには置かないのが原則です。(共有サーバーによっては、ドキュメントルート外に置くことが出来なかったり、禁止されていたり、もしくは外ではPHPスクリプトの実行が制限されているかも知れません。そうした場合は仕方ありません。)
app、core、packagesディレクトリーはPHPスクリプトが実行できるのであれば、どこに置いてもいいですし、名前を変えてもかまいません。ですが、管理の都合を考えれば、その上の階層fuelを、ブラウザなどからアクセス可能なドキュメントルート下を避け、アップロードするのが簡単です。
次に、ネットからアクセスされるpublicフォルダー、これも実機サーバー上のドキュメントルートのどこに設置するかを考えましょう。ドキュメントルートでしょうか。それとも、サブフォルダーでしょうか。
フレームワークによっては、ローカルの環境をそのままアップロードすれば、済むものも多いです。残念ながら、FuelPHPは一手間かかります。
では、アップロードしましょう。例がないと説明しづらいため、よく見られる以下の構成を元に考えます。(ディレクトリーの名称は違っていても、共有サーバーではよく見られる構成です。)
/home/myhome/ あなたのルートフォルダー
/home/myhome/docroot/ ドキュメントルート
fuelを/home/myhome下へアップロード
fuel下のapp、 core、packagesもそのままアップロードされます。セキュリティーの理由から、アクセス可能なドキュメントルートをさけ、ホームディレクトリーへアップします。
ローカルのpublicの中身を、ドキュメントルートへアップロード
今回はドキュメントルートへFuelPHPのドキュメントルートであるpublicの内容を置く前提です。もちろんその下のサブフォルダーでもかまいません。今インストールしているシステムを動かすには、ローカル環境でpublicの中にあるindex.phpがアップロードされたディレクトリーの場所へ、ブラウザからアクセスすることで、動作します。
アップロードすると、こんな構成になります。
/home/
| +myhome/
| | +fuel/
| | | +app/...
| | | +core/...
| | | +packages/...
| | +docroot/
| | | +index.php
| | | +assets/
| | | | +css/...
| | | | +js/...
| | | | +img/...
もし、ドキュメントルートではなく、subというディレクトリーにアップロードすれば、このような構成です。
/home/
| +myhome/
| | +fuel/
| | | +app/...
| | | +core/...
| | | +packages/...
| | +docroot/
| | | +sub/
| | | | +index.php
| | | | +assets/
| | | | | +css/...
| | | | | +js/...
| | | | | +img/...
index.phpとoil(phpスクリプトです)には、app/core/packagesディレクトリーの場所が書かれています。ディレクトリー構成を変更した場合、それに合わせなくてはなりません。index.phpでは、次の3行を変更します。
define('APPPATH', realpath(__DIR__.'/../fuel/app/').DIRECTORY_SEPARATOR);
define('PKGPATH', realpath(__DIR__.'/../fuel/packages/').DIRECTORY_SEPARATOR);
define('COREPATH', realpath(__DIR__.'/../fuel/core/').DIRECTORY_SEPARATOR);
define('APPPATH', realpath('/home/myhome/fuel/app/').DIRECTORY_SEPARATOR);
define('PKGPATH', realpath('/home/myhome/fuel/packages/').DIRECTORY_SEPARATOR);
define('COREPATH', realpath('/home/myhome/fuel/core/').DIRECTORY_SEPARATOR);
oilも記述されているパスは異なっていますが、同様に変更してください。
なお、oilを実働サーバー上で使用することが無ければ、アップロードする必要はありません。
FTPソフトで転送しないファイルを指定できるようならば、誤まって上書きしないようにindex.phpを転送しないように設定しておくのも、良い手です。
アップロード後にすぐ、実働させる場合はエラー出力を止めましょう。ini_set('display_errors', 0);と変更してください。
通常、アップロードした後で会っても動作確認や、テストを行い、直ぐには実働しないでしょう。その場合は1のままにしておきましょう。但し、リリース前には0にするのを忘れないようにしましょう。
FuelPHPの特徴の一つは、開発時と実働時に設定ファイルを切り替えられることがあります。例はDBで、ローカルであれば自分の好きなようにDB名なども設定できますが、共有サーバーでは通常、ユーザーに割りつけられたプリフィックスなどが付きます。
app/configの下にはdevelopmentとproductionの2ディレクトリーがあり、このどちらかを使用するかを切り替えられます。
デフォルトは、開発モードであり、development下の設定ファイルが利用されます。これを設定ファイルなどをいじらなくともproduction下のファイルを使用するように変更できるのです。
方法は.htaccessにSetEnv FUEL_ENV productionの一行を追加し、環境変数を設定するだけです。但し、サーバーの設定によっては環境変数の設定ができないこともあります。
環境変数の設定ができない場合は、app/bootstrap.phpを開き、Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT);の一行を、Fuel::$env = Fuel::PRODUCTION;に変更します。
なお、当然ですが、production下に実働のサーバー用の設定ファイルを用意して置かなければ、トラブります。(ファイルが存在しなければ、app/config下、そこにもなければ、core/config下の内容が使用されることでしょう。)
DBの移設も忘れないで下さい。
MySQLをご使用なら、ローカルでPhpMyAdminを利用し、DBの中身を吐き出し、実際のサーバーで取り込みましょう。
移設はローカルで使用していたデーターをそのまま利用するのか、それとも空のテーブルで良いのか、もしくは実働用に作成するのがいいのか、考えましょう。
ローカル環境ではきちんと動作していたのに、実際のサーバーでは動かない場合、ドキュメントのトラブルシューティングを参照しましょう。
FuelPHP日本語ドキュメント(nekogetさん提供)トラブルシューティング
意外と、サーバーのPHPバージョンが5.3より低いなんて、ありがちなミスですよ。(ちなみに、私の使っているこのサーバー、前の会社が吸収される前は5.3でしたが、吸収の直前にサーバーが移動され、いつの間にか5.2になっていました。今は交渉して、ただで5.3のサーバーに移動してもらっています。)
| FuelBeans 23 : DBのスニペット< 前 | 次 >FuelBeans 27 : モデルも出る |
|---|
| < 前 | 次 > |
|---|