赫謙小便籤

Nginx Tunning

準備讓公司的系統上線了,在調整Nginx的效能 …

參考這篇 http://v1nc3ntlaw.github.com/rubyconf-tw-2011-rails-sa/#13 然後看了一下,看到worker_processes 16;感覺好像太高,畢竟我們公司的Server才1G RAM … 怕直接死掉XD

不過nofile的值我是設定32768,然後根據這篇 http://www.cnblogs.com/skyaspnet/archive/2010/09/02/1815749.html 設定了 fs.file-max 的值到2390251

worker_connections的部份則是參考這篇 http://hi.baidu.com/ugo5/blog/item/f4fb6037322059aed1a2d31b.html

不過若是可以,這篇也要參考一下 http://sudone.com/nginx/nginx_worker_processes.html

最大連接數的計算公式是:worker_processes * worker_connections / 4,而worker_connections最好超過9000的話,我是直接上到10240,所以我的設定檔大概長這樣:

1
2
3
4
5
6
7
worker_processes 8;
worker_rlimit_nofile 32768;

events {
  worker_connections 10240;
  use epoll;
}

上網查了一下,epoll似乎是Linux 2.6核心加入的功能,效能似乎不錯便加上去了。

Rails Best Practice 與 Refactor

rails_best_practices是一個很不錯的Gem套件,它匯集了一些調整Rails Performace的小技巧,並且透過指令 bundle exec rails_best_practice .的方式就能夠列出你的問題,跳轉可以看到我噴了哪些東西XD

可以透過gem rails_best_practices來安裝,官方網站在 https://github.com/railsbp/rails_best_practices

之後再慢慢列出解決的方式,這時真的發現有Git真好:P

繼續閱讀 →

Paperclip 上傳驗證

因為一些原因,需要驗證使用者是否有上傳照片,若有上傳照片才需要驗證檔案大小、檔案格式

1
2
3
4
5
6
7
8
9
10
# model.rb

validates_attachment_size :avatar, {
  less_than: 300.kilobytes, if: Proc.new{|imports| imports.avatar.uploaded_file.present?}
}

validates_attachment_content_type :avatar, {
  content_type: ["image/png", "image/jpeg", "image/jpg"],
  if: Proc.new{|imports| imports.avatar.uploaded_file.present?}
}

Compass-rails + Anjlab-bootstrap-rails發生的小問題

事情發生經過

那時跟著 http://railscasts.com/episodes/328-twitter-bootstrap-basics?view=asciicast 剛用Bootstrap建構好網站的頁面,也加上了navigation bar (就是上面黑黑的那條),根據指示加上 bootstrap_and_overrides.css這支檔案用以讓padding-top可以從預設的40px改為60px,可是裝上compass-rails之後,我的世界開始變了樣 … (誤) 後來直接在application.html.erb內的head區塊中加上以下程式碼

1
2
3
4
body{
  padding-top: 60px;
  padding-bottom: 40px;
}

嗯,打完收工,一切搞定,萬事OK

透過gem手動安裝anjlab的twitter Bootstrap

因為一些原因要手動自己裝anjlab的anjlab-bootstrap-rails,所以特此記錄一下 …

先Clone下來

1
git clone git://github.com/anjlab/bootstrap-rails.git

再進去該目錄後執行

1
2
cd bootstrap-rails
rake install

打完收工

Devise開發小筆記

這篇很不幸的被我遺忘了 …. - -|||

以後有機會再來寫

Devise註冊後自訂轉向頁面

因為公司的網站在註冊會員之後需要根據不同的App來顯示不同的layout或畫面,因此註冊後要自訂一個轉向頁面,所以我們必須要自己override原本的RegistrationsController …

繼續閱讀 →

Rails Based on Unicorn + Nginx on Ubuntu Linux @ Linode

這篇文章是從原本「赫謙隨筆(Posterous)」中轉過來的,所以內文是一樣的。

繼續閱讀 →

Rails的關連小筆記

今天在rails best practices中看到一則ActiveRecord Query Interface Optimization,裡面提到在has_manybelongs_to的時候可以自訂:select來指定要撈出的欄位 … 所以請繼續閱讀

繼續閱讀 →

在iOS中透過Bonjour搜尋Domains以及服務

Bonjour是蘋果的一個類似DNS的服務,適用於區域網路之中,所以在Mac OS X, iOS中都可以看到它的身影,且在一些印表機之中也看得到。

今天我們就來嘗試用Bonjour來搜尋同一個區域網路底下有哪些服務吧。

記得在.h檔中引入<Foundation/NSNetworkServices.h>,然後它需要一個delegate來代理整個回呼(Callback)的執行,所以必須要採用NSNetServiceBrowserDelegate這個Protocol。

之後,我們可以透過實體化NSNetServiceBrowser來進行Domain的搜索:

1
2
3
  NSNetServiceBrowser *browser = [NSNetServiceBrowser new];
  [browser setDelegate: self];
  [browser searchForRegistrationDomains];

之後我們要實作以下五個delegate methods:

  • netServiceBrowserWillSearch: // 開始搜尋
  • netServiceBrowserDidStopSearch: // 停止搜尋
  • netServiceBrowser:didNotSearch: // 搜尋如果失敗
  • netServiceBrowser:didFindDomain:moreComing: // 如果有找到的話
  • netServiceBrowser:didRemoveDomain:moreComing: // 如果某個Domain消失的話

舉個netServiceBrowser:didFindDomain:moreComing:的例子:

1
2
3
4
5
6
7
- (void)netServiceBrowser:(NSNetServiceBrowser *)browser
            didFindDomain:(NSString *)domainString
               moreComing:(BOOL)moreComing{
  NSLog(@"[ADD] Domain String: %@", domainString);
  if(!moreComing){
  }
}

如此一來,我們可以在moreComing為false的時候更新我們的UI列表即可。

之後,再來繼續撰寫怎樣搜尋服務。