2015年10月26日 星期一

Laravel 5.0 安裝與目錄調整

建立新專案的指令如下
composer create-project laravel/laravel laravel-5.0-empty  "~5.0.0" --prefer-dist
rm vendor/compiled.php
composer update
php artisan fresh (remove this scaffolding)
安裝後,共 19.3 MB,其中 vendor 下,有4,526 個檔案,共 18.4 MB。

記得設定 config/app.php 中的時區,
// 'timezone' => 'UTC',
 'timezone' => 'Asia/Taipei',


在使用 Laravel 5.0 開發網頁時,每次要備份,vendor 目錄下,檔案很多,要備份時,花很多時間來掃描。因此希望將 vendor 由應用程式分開,可以減少備份時間。另外,storage目錄下的東西,也是無需備分的。

更進一步,再調整一下目錄,也有可能多個 App 共用 vendor。

此外,index.php 原先是放在 public 的目錄下,目錄不好設定。因而,個人習慣是,將 index.php 改為放在 App 的根目錄下,然後將程式放在子目錄下,例如 app-src 下。

調整後,希望目錄長成這樣子

[myapp]
   |
   +-- [app-src]
   |      |
   |      +- [app], [bootstrap], ...
   |  
   +-- [L5-vendor] /* this can be moved out the project */
   |  
   +-- [storage]
   |
   +-- index.php, favicon.ico, ...

在此,使用 IIS 6 的 web server,網頁的根目錄為 "\Inetpub\wwwroot"

要修改的檔案內容如下
1. 修改 la-tst/myapp/index.php
  define('BASEDIR', __DIR__.'/app-src');
  define('VENDORDIR', __DIR__.'/L5-vendor');

  require BASEDIR.'/bootstrap/autoload.php'; 

  $app = require_once BASEDIR.'/bootstrap/app.php';
  $app->useStoragePath(__DIR__.'/storage');
 
     若要將 vender 目錄移到專案外,讓多個專案共用。必須修改 config/session.php,設定不同的cookie 名稱,不然會出現 "TokenMismatchException in VerifyCsrfToken.php" 的錯誤。


2. 修改  app-src/bootstrap/autoload.php
  require VENDORDIR.'/autoload.php';

3. 修改 L5-vendor/composer 下的 4 個 autoload 檔,包括 autoload_classmap.php、autoload_files.php、autoload_namespaces.php、autoload_psr4.php
  $vendorDir = VENDORDIR;
  $baseDir = BASEDIR;

調整好後,有可能要重新啟動 web server,才能正常運作。

瀏覽的 url:
http://10.161.86.192/la-tst/myapp/index.php

在此稍加說明,我是用 composer 安裝一個空的 Laravel 5.0 專案。啟動一個新的 AP 時,建立一個新的 App 目錄,直接 copy 整個目錄,然後,進行開發。
因此,在正規的作法,composer 目錄下的檔案是以 composer 來產生。但在此,直接手動改內容,是有點不太正規,但我是打定主意,不 update 系統。因為,目前已是 Laravel 5.1 是主流,5.0 已不太會更新。

另一調整目錄方式

在使用一段時間後,還是有必要 update。就是把根目錄下的全部東西,都移到 app-把 public 目錄下的東西,提到根目錄下

調整後,希望目錄長成這樣子

[myapp]
   |
   +-- [app-src]
   |      |
   |      +- [app], [bootstrap], [vendor]...
   |
   +-- [storage]
   |
   +-- index.php, favicon.ico, ...


這樣,只要修改 index.php 的內容,能夠 include 到檔案即可,然後再改一下 storage 的目錄。這樣的目錄安排,不用修改伺服器設定,也可以 update package,缺點是,有些 artisan 的指令不能用,只能自行取捨了。

沒有留言: