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 的指令不能用,只能自行取捨了。

2015年10月21日 星期三

Synology NAS RS810+ 升級 8TB 硬碟


Synology NAS RS810+,購入時間為 2011年11月,當時最大的 3.5 吋 SATA 硬碟為 2TB,而且,為了省錢,只用 WD 綠標的硬碟。在 2014 年時,4TB 硬碟的價格已降至可接受的範圍,升級為 WD 紅標 4TB 硬碟。到 2015年8月,Seagate 出的 8T 硬碟,價格已降至和去年 4TB 的價格差不多了。

由於在群暉的規格中,並未明確說明 8TB 的硬碟是否可用。因此先買一顆來試用,結果可以正常抓到,且可正常運作。確定之後,再買齊其他的 3 顆,目前還在同位元資料一致性檢查中,不曉得還要跑多久。

安裝時,有一點不順之處,不曉得是不是 Seagate 為了塞下更多的 disk,少了兩個螺絲孔,因此,只好只鎖兩顆螺絲。還好,裝在機殼內,不會隨便亂動。

由於,為了儘可能有最大的可用空間,只設成一顆容錯。因此,拆下硬碟後,要儘快裝回去。硬碟裝回去,且等系統抓到硬碟後,要選擇「儲存空間1 」,再點選「管理」,然後選擇執行修復

修復的過程包括
  1.  重建,這一步驟蠻快的,恢復有一顆硬碟的容錯保護
  2.  同位元資料一致性 (consistency check),很久,而且有資料異動,又會從 0.00%從頭開始。
  3. 新增硬碟 ,好像也要很久,超過24小時。
4 顆 4TB 硬碟,可用容量 10.73TB。換上2顆 8TB硬碟後,變成 2 顆 4TB + 2 顆 8TB 時,可用容量會變成 14.31T。換到第三顆 8TB 時,在修復時,會顯示可用容量為 21.46TB,但修復後,卻仍為 14.31TB。換到四顆都是 8TB 硬碟時,修復時,提示的容量會增為 23.10TB,但在修復及一致性檢查之後,可用容量仍為 14.31TB。所以,很明顯的,這一型機器,最大容量就只能到 14.31TB。

既然,無法有更多的硬碟空間,乾脆打掉重建,變成有2顆容錯的組態,可用容量約為 14TB左右,這樣比較安心。折騰了半天,可用空間沒有增加多少,換來的只是多一點安心而已。

驚! 才剛把設定改成有2顆容錯的組態,磁碟陣列重建完,開始把資料 copy 回去,就發生抓不到硬碟的錯誤。將硬碟拔出來,重新插入,可以抓到。但是,在進行修復不到一個小時,硬碟又消失了。才用不到兩個月的硬碟,就發生這種情形,真是讓人驚出一身冷汗。還好,有多買一顆,換上去看看,能撐多久,這次就當白老鼠吧。

2016-08-05
又再來試一次, 這次買的是 WD 的紅標 NAS 碟, 一顆1萬1左右。螺絲孔位與Seagate 的8TB硬碟一樣,只能鎖2顆螺絲。
換完以後,仍然顯示只有 14.31TB。在資料備份之後,重新設定為2顆硬碟容錯,直至目前,1個月左右,還好,沒有硬碟消失的情形。還在持續觀察中。

2015年10月9日 星期五

Laravel 3.2 與 5.0 的粗略比較

在 2015 年 8 月以前,都還是用 Laravel 3.2.14 來寫網頁程式。直到最近,在 Laravel 5.1 出來之後,想要把程式做比較好的架構,才開始使用 Laravel 5.0。只用 Laravel 5.0,是因為 Laravel 5.1 需求為 PHP 5.5.9 以上,但目前主要還是使用 Windows 2003 Server,只能安裝 PHP 5.4,因而只好使用 Laravel 5.0。
一些小小的比較,列表如下
Laravel 3.2   Laravel 5.0
source files439 files4595 files
source-size3MB15MB
cache scripts151 scripts587 scripts
cache used-memory   7.6 MB13.29 MB
Requests per second   290.33 [#/sec]  122.94 [#/sec]

其中,針對安裝後,空的 framework,source files 為其所包含檔案數,source-size 為其使用的硬碟空間。然後在執行時,使用 Zend OPcache 加速,得到其統計資料,scripts 為 cache 住的 script 數目,userd_memory為其使用的記憶體大小。

速度比較,使用 Apache 的 ab 程式,簡單的測試其處理效能,程式只是傳回 5 byte 的 "Hello" 字串,Requests per second 為每秒回應的 request 數。不過,在效能上,通常程式並非是決定性的影響,反而是資料庫的存取決定了應用程式的效能,因此,要提升程式的效能,應對資料庫的調校下一些功夫。

從以上的粗略比較,得知,不論檔案數和使用的空間,Laravel 5.0 都大約是 Laravel 3.2.14 的 2 倍以上;而相對的,在效能上,前者大約為後者的一半以下。隨著硬體效能的進步,寫程式越來越不需要在意效能的問題,包括大小與速度。在意的是,開發的速度和所花的精力,還有日後在維護程式上的方便。這也是使用較新的 framework 的主要考量。

網誌存檔