Yearly Archives

25 Articles

Lua用setmetatable返回默認值為function時的暗坑

0   118387 轉為簡體

想在api服務器里實現一個acl的功能,對某些請求(需要登錄,需要檢查appkey,需要限制頻次等)做限制,對某些起始狀態(比如登陸)或者終結狀態(比如報錯)的請求放行。

因為lua里木有switch case,因此通過一個acl_list的table去查找規則,因為需要限制的請求種類比較多,就把rule_check_token當成默認值了,一看是是這麼寫的:

然而卻會在local token= xxxx那一行報stack overflow,想了半天也發現哪裡有無限遞歸,因為query傳進來的是http請求的query string解析出的鍵值對錶。

把query打印出來一看,發現竟然是這個模塊本身……

仔細看了文檔才知道,原來__index後面的值是一個function時,lua會調用這個function去獲得不存在的鍵,並且第一個參數是模塊本身(即_M,一個table)。在這個例子里:

  1. 調用一個非默認規則的api
  2. lua調用了rule_check_token
  3. 參數query被傳入了_M本身
  4. 運行到local token= xxxx這一行
  5. 這個table里(_M)又沒有token這個鍵
  6. 回到2

所以就死循環了

 

所以要好好看文檔

 

解決方法是可以套一個function

 

貼一個打印table的工具,方便調試:

可以打印出如下形式:

使用openresty請自行改寫成local function和ngx.say的形式

mongo好大一個坑

2   73978 轉為簡體

因為種種原因被逼着寫mongo……

作為一個初學者,我發現了幾個坑:

新的協議沒文檔

官網上只有Legacy Driver Implementation Documentation這箇舊的協議文檔,新的文檔的鏈接是一個死循環,繞一圈可以回到原地(不信你試試)。可能有用的只有一個視頻,還是2011年的,不想看了,哦草。這裡還有一個2013年的,從stackoverflow看來的

當然官方給的各種語言的SDK里倒是一直在更新的。

但是給個文檔會死啊!

雖然是在用lua寫,所以本來也是作死。

但是給個文檔會死啊!

因為lua-resty-mongol沒有支持新協議,所以會有這麼個問題

在update里使用$pull,lua-resty-mongol用getLastError取被修改的行數,永遠是返回1(這特么誰設計的),沒辦法知道改成功了沒有。只能update前後各find一次比較了哈哈哈哈哈哈。

設計太坑爹

除了之前的getLastError永遠返回1以外,還有一個問題:

之前是2.4.x版本,升級到3.x之後,告訴我admin庫需要升級,否則沒法登陸,而且需要用2.6.x版本來升級

呵呵

還有一個問題:

現在我有這麼個文檔post,每個記錄是這樣的:

首先(只)取所有評論的話是沒有問題的↓:

現在我想取出_id是5下的前15條評論

這麼寫↑,post_content也出來了,post_content好大的啊,不想取怎麼辦啊

這麼寫↑,_id沒了,其他post_content還在

↑並沒有什麼卵用


↑這樣_id有,其他鍵沒了。

所以結果是_id必須留着……

沒錯我是強迫症,強迫症多着呢

 

從目前的我所遇到的情況來看,似乎mongodb能幹的奇妙功能用SQL數據庫一樣能搞,無非要再配合別的靠譜的nosql數據庫(比如redis這種)。至少寫了代碼還能預測能發生什麼。像mongo這樣寫着寫着給你個驚♂喜的實在受不了了。哦不過也有可能被虐着虐着就有感♂覺了呢(ง •̀_•́)ง

 

PS : 我是mongo初學者,歡迎大神來鞭撻我

 

Incapsula的IPV6垃圾垃圾真垃圾

0   9669 轉為簡體

你說你A了一個(日本的)/32,一個(美國的)/44,一個(以色列的)/48,好像都是NTT的線路。點此處有真相

(bgp.he.net上查不到,說明並沒有路由,也就是放置play。

用什麼不好,偏偏要用以色列的那個,連自己特么官網都是這個IP段。

436919cbjw1es8jrr26zwj20am02m0t0

你知道教育網ping多少嘛?300多ms

所以並沒什麼egg用。

另外我發現incap的官網ipv4也用的香港那段,哈哈哈哈哈哈

迅雷快鳥(diǎo)路由器版

557   295734 轉為簡體

可以在路由器或者同一網絡下的任意設備上登陸並心跳,這樣就不用開電腦也不用在手機里裝奇怪的應用了。

對我有潔癖你來打我呀

436919cbgw1erq704m1h4g205k049nfa有問題請留言。如果你要報告一個問題,請同時註明:

  • 所使用的版本 (Python/Shell)
  • 運行的系統環境及版本 (操作系統,Python版本等)
  • 包含錯誤信息的日誌
  • 產生錯誤的操作步驟
  • (可選) 運營商所在地,如:上海電信

Read More

再見多說

17   76339 轉為簡體

遷移到disqus,舊評論已導入,等後台處理

默認頭像->

你們說好不好呀

我肯定是茲瓷的咯

算了還是滾回去用多說好了,這導入太不靠譜