2015年7月27日 星期一

使用Laravel artisan schedule:run時 exec被禁用時的替代方案

```php namespace App\Console; use Artisan; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ 'App\Console\Commands\Inspire', ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule */ protected function schedule(Schedule $schedule) { // 當exec被disabled時只要改成使用Artisan::call('command')即可 $schedule->call(function () { Artisan::call('inspire'); }) ->hourly(); } } ```

遠振主機上利用crontab執行 laravel artisan schedule:run

在專案中有個需求需要在固定時間去抓取固定資料 既然都已經使用laravel所以當然開始使用artisan寫寫console指令 於是很快速的寫完程式,當然第一時間就在自己本機上測試 測試的結果當然是一切都正常 所以很快的就把程式上傳到遠振主機上 並且設定了Cron的排程 ```bash * * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1 ``` 設定完後,想說一切都妥當了, 但程式一直出錯 系統就回應 ```ini [ErrorException] Invalid argument supplied foreach() ``` 這要怎麼debug啊 而且明明在自己電腦內測試都能正常執行啊 所以只好開始研究程式碼囉,查到最後原來..... 遠振主機的php預設為 php-cgi 所以無法取得正確的參數 如果要artisan正常執行的話必須使用php-cli 所以在遠振主機上要執行artisan應該要改為 ```bash * * * * * /usr/bin/php-cli /path/to/artisan schedule:run 1>> /dev/null 2>&1 ``` 應該所有的cpanel主機只要是可選php版本的都會遇到這個問題...... php-cli和php-cgi兩個在console上執行的差異 php-cli 的參數會存入 $_SERVER['argv']; php-cgi的參數則會存入 $_GET; 如果要讓php-cgi能正常執行則可以用以下做法 ```php if (empty($_GET) === false) { foreach ($_GET as $key => $value) { $_SERVER['argv'][] = $key; } } ```

2015年4月12日 星期日

sublime 安裝 less

1. 安裝[nodejs](https://nodejs.org/) 2. 開啟cmd,並執行 ```bash npm install -j less ``` 3. sublime安裝 LESS, smart less build 4. 修改smart less build設定檔 ```json { "source_map": false "custom_args": "--clean-css=\"--s1 --advanced --compatibility=ie8\"" } ```

sublime 安裝 coffeescript

1. 安裝[nodejs](https://nodejs.org/) 2. 開啟cmd,並執行 ```bash npm install -j coffee-script ``` 3. sublime安裝 Better CoffeeScript 4. 修改coffeescript設定檔 ```json { "checkSyntaxOnSave": true "lintOnSave": true "lintConfFile": true } ```

sublime syncing

windows內如何同步sublime的設定檔至多台電腦呢? 我們可以利用Dropbox加mklink的方式來做設定喔 請使用系統管理者權限開啟cmd 1.將已設定好的sublime的設定檔移至dropbox內 ```bash mkdir %USERPROFILE%\Dropbox\Sublime cd %APPDATA%\"Sublime Text 3\Packages" copy /Y User\* %USERPROFILE%\Dropbox\Sublime ``` 2.同步所有資料夾 ```bash cd %APPDATA%\"Sublime Text 3\Packages" rmdir /S /Q User mklink /D User %USERPROFILE%\Dropbox\Sublime ```

sublime terminail套件使用git bash

1.安裝 [git](http://git-scm.com/download/win) 2.sublime安裝Terminal 3.將Terminal => Settings - Default的內容複製到Terminal => Settings - User 4.修改 ```json { "terminal": C:\\Program Files\\Git\\git-bash" } ``` ![Alt text](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9raJknXL-st6xur1NB_oFc1eae_gr5l2JrjQ7DfCFgoN1pzblcEMPztphGxZIiWK9RjAjCE1IhZRHkW8I9fWRUNfaBTIC6xn2AH1eYzGLnbN8Bhg-q0XIBPhE0FV3bLDH8uGAlGItmwAz/s1600/Image+2.png) ![Alt text](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2_y8Z-a_Xi6csjteuzvpFnLyhG_z5yimOO14uIVHYDNb3-GlHs8vsWtvtNF4Yj4NHigRP43FbJKpYbWLa8yc4bufrqgofcu40Wu0D8sOhlxm-zRzkNBI_3KgGrXJgj7fUcLETyr7_LFGS/s1600/Image+3.png)

sublime安裝phpcs windows版

1.安裝sublime並安裝好package control 2.安裝phpcs 3.打開command並利用composer安裝 [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) [PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) [PHPMD](https://github.com/phpmd/phpmd) ```bash composer global require squizlabs/php_codesniffer fabpot/php-cs-fixer phpmd/phpmd ``` 4.將PHP Code Sniffer => Settings - Default的內容複製到 PHP Code Sniffer => Settings - User 5.修改Settings - User ```json { "phpcs_executable_path": "phpcs.bat", "php_cs_fixer_on_save": true, "php_cs_fixer_executable_path": "php-cs-fixer.bat", "phpcbf_on_save": true, "phpcbf_executable_path": "phpcbf.bat", "phpmd_run": true, "phpmd_executable_path": "phpmd.bat" } ``` 如果進行存檔時還是會提示錯誤訊息修改下列參數即可 ```json { "phpcs_php_prefix_path": "php路徑\\php.exe" } ``` 參考 [wamp安裝](http://phpwrite.blogspot.tw/2015/04/uniform.html) [composer安裝](http://phpwrite.blogspot.tw/2015/04/windowscomposer.html)