跳到主要內容

Redeclare Error with APC

如果 apc.enable_cli 因為"某些因素"有開啟的話
那麼有時候一些 command line 會遇到類似下面的 error
"Cannot redeclare class xxxxx"

這時候有兩種方式:
1. 如果是針對 .phar 的話, 可以用 apc.filters="^phar://"
2. 如果是 cron job 或者暫時性的話: php -d apc.enabled=0 /path/to/cron_job.php

比較特別的是 phar 檔不只是 cli 容易遇到 redeclare error,  像是 aws 的 php sdk 最好還是用 composer 的方式安裝吧.


See Also:
http://stackoverflow.com/questions/4575341/php-with-apc-fatal-errors-cannot-redeclare-class

http://docs.aws.amazon.com/aws-sdk-php/guide/latest/faq.html#why-am-i-seeing-a-cannot-redeclare-class-error

留言

這個網誌中的熱門文章

3M UVA3000 更換濾芯紫外線燈匣

用了一年的3M濾水器提示說要換濾芯和燈匣 上 Youtube 想找教學的影片可是沒看到 UVA 3000 的 經過了一番奮戰後在這邊記錄一下 希望可以幫助後人,以免再重蹈覆轍。 Step 1. 拔掉插頭,把淨水器從牆上拿下來(基本上他是掛著而已),比較方便施工。 Step 2. 把前蓋往上拉,很容易就可以看到裡面的東西了。 Step 3. 打開後可以看到有兩個柱狀體,左邊的是燈匣,右邊的是濾芯。 Step 4. 這裡有個祕技是,這兩個柱狀體是可以往上 翻開30 度左右,這樣就可以有比較大的空間施工。 Step 4. 更換濾芯的話,柱狀體的瓶身上有箭頭,往左就是轉開,往右就是鎖緊。 Step 5. 更換燈匣的話比較麻煩一點,因為他底部是電源,頂部的右邊有個突出來的小方塊。對照淨水器上方連接處的話會有個弧形的凹槽,這是要 match 的.如果你只注意瓶身的箭頭往右鎖回去,就會造成漏水...Orz... Step 6. 把前蓋蓋回,機器掛回牆上,插插頭,開水,如果機器沒有告訴你有燈匣異常或漏水的話,就可以長按 C / UV  Reset 計數器了. 所以關鍵字就是,要往上翻 30 度,燈匣上面的小凸點要在右側,要看瓶身的 小箭頭. May it helps!

CloudFomration and serverless lambda deployment

幸運的有 AWS::Serverless::Function 可以使用,不然想到要用 Custom Resource 頭就痛。原生的 AWS::Lambda::Function 如果要使用 Provisioned Concurrency 就必須使用 Version/Alias,但是 Version 的 property 全部都是不能更新的!所以接下來 lambda function 的更新,都不會讓 Alias 指向新的 Version.... 還好透過 Transform 的宣告後,啟用AutoPublishAlias: live 再加上小部分 property 的修改,CloudFormation 就可以自動地幫我們管理 Version 和 Alias 啦。 不過還踩到另外一個小雷是,預設 Application Load Balancer 的 Target Group 如果是指向 lambda 的話,healthy check 是關閉的。但是在這種情況下,你 update stack 就會遇到 " ElasticLoadBalancerV2 TargetGroup did not stabilize " ,很厲害的 AWS Support 就給了一個 workaround ,把 healthy check 打開就好了 .... lol Ref: https://stackoverflow.com/questions/41452274/how-to-create-a-new-version-of-a-lambda-function-using-cloudformation

AWS CloudWatch Synthetics

原本想用 DataDog 的 Sythetics API Test 做 e2e monitoring & alarm 但是遇到 multi-part form-data 沒辦法在 Request Body 使用 \r\n 的問題 curl -i -X  --trace-ascii - -F 'key=key1' -F 'key2=key2' https://whatever.totest.com/auth 你可以看到送出的 Content-Length 和 Request Body 是 Content-Length: YYY Content-Type: multipart/form-data; boundary=xxxx --xxxx Content-Disposition: form-data; name="key1" key1 --xxxx Content-Disposition: form-data; name="key2" key2 --xxxx-- 但是使用 DataDog 送出去的話只會用 \n 和 curl 送出的一比較,就發現 Content-Length 比較小,但是 DataDog 似乎沒辦法改.. 試了一下 AWS CloudWatch Synthetics Canary 發現他其實就是 deploy 一個 nodejs lambda layer 裡面執行 Puppeteer, Chromium 和 AWS SDK 但是又整合了 cloudwatch dashoboard, cloudwatch logs 和 cloudwatch alarm,所以不只可以跑 script 還可以透過 chromium 去抓網頁的 screenshot 彈性超大! 另外一個好處是可以編輯要送出去的 postData,一開始我看他預設也是送 \n 會造成 invalid request 但是只要改成 \r\n 就好囉!