2012年1月17日 星期二

Run Rails Project On Mac

先安裝Mysql
$ brew install mysql

按照Gemfile安裝需要的套件
$ bundle install

安裝DB資料
$ rake db:create
$ rake db:migrate
$ rake db:seed

跑rails server
$ rails server

修改後上線步驟
rake assets:precompile
nginx reload

Mac Install Imagemagick

$ brew install imagick

2012年1月13日 星期五

Apache RewriteMap Usage

從 IP 判斷User的合約
ip_contract_map.txt 如下:第一欄為User IP,第二欄為合約ID
10.1.1.254 1
60.199.248.193 2
60.251.144.84 3
114.32.4.229 3

Apache設定:

...
#打開RewriteEngine
RewriteEngine on

#將 mapping 讀出來當成contracts這變數。
RewriteMap contracts txt:/srv/www/ip_contract_map.txt

#不覆寫原本的網址,直接用 User 的 IP 當成 key 去 mapping 裡面找。
# %{REMOTE_ADDR} 是遠端的IP
RewriteRule .* - [E=REDIRECT_CONTRACT_ID:${contracts:%{REMOTE_ADDR}}]
...

2012年1月11日 星期三

Install Ubuntu As Server On EC2

0. 修正Locale,看起來爽一點。加到 .bashrc 最後
export LC_ALL="en_US.UTF-8"

1. 格式化新硬碟,(在Amazon Console已經掛上來的前提)
看一下其他硬碟的格式
$ cat /etc/mtab
/dev/sda1 / ext3 rw 0 0

開始格式化成ext3
$ mkfs.ext3 /dev/sdf
/dev/sdf is entire device, not just one partition!
Proceed anyway? (y,n) y

2. 將格式化好的硬碟掛到 /mnt
看一下沒mount前。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.9G 745M 6.8G 10% /
none 285M 112K 284M 1% /dev
none 318M 0 318M 0% /dev/shm
none 318M 52K 318M 1% /var/run
none 318M 0 318M 0% /var/lock
none 318M 0 318M 0% /lib/init/rw

$ mount /dev/sdf /mnt/

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.9G 745M 6.8G 10% /
none 285M 112K 284M 1% /dev
none 318M 0 318M 0% /dev/shm
none 318M 52K 318M 1% /var/run
none 318M 0 318M 0% /var/lock
none 318M 0 318M 0% /lib/init/rw
/dev/sdf 99G 188M 94G 1% /mnt

3. 設定開機掛載
$ vi /etc/fstabs
加在最後,剛剛格式化成ext3,mount到mnt
/dev/sdf /srv ext3 defaults 0 0

確認mount是否有掛好
$ mount /srv

4. 安裝apache
$ apt-get install apache2-mpm-prefork

5. 安裝php及常用lib
$ apt-get install libapache2-mod-php5 php5-gd php5-common php5-cli

6. 安裝mysql
$ apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql

7. 安裝tomcat (optional)
$ apt-get install tomcat6
安裝Solr參考:http://charlesleifer.com/blog/how-to-set-up-solr-on-ubuntu-1004-or-whatever/

8. 安裝geoip (optional)
$ apt-get install php5-geoip
GeoIP後續步驟參考:http://www.php.net/manual/en/geoip.setup.php#93000

9. 安裝imagemagick
$ apt-get install imagemagick php5-imagick

10. 調整 php.ini 上傳檔案的大小限制(optional)
$ vi /etc/php5/apache2/php.ini
post_max_size調整為12M
upload_max_filesize調整為10M

11. 啟用module rewrite
$ cd /etc/apache2/mods-enabled/
$ ln -s ../mods-available/rewrite.load rewrite.load

11. 安裝svn
$ apt-get install subversion

12. 調整log位置
$ cp -r /var/log /srv/log
$ mv /var/log /var/log-bak
$ ln -s /srv/log /var/log

13. 安裝 cronolog (recaommand)
$ apt-get install cronolog

2012年1月5日 星期四

Mysql Import Data

Import Command:
mysql -u USER_NAME -p DB_NAME < YOUR.sql

如果sql檔太大,會出現以下錯誤。
ERROR 1153 (08S01) at line 523: Got a packet bigger than 'max_allowed_packet' bytes

解決方法,進入mysql,執行以下SQL:
set global max_allowed_packet=1000000000;
set global net_buffer_length=1000000;

2012年1月4日 星期三

C# SHA1 As PHP

public static string sha1(string input, bool rawOutput = false)
{
System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
System.Security.Cryptography.SHA1Managed hash =
new System.Security.Cryptography.SHA1Managed();
byte[] output = hash.ComputeHash(encoder.GetBytes(input));
return rawOutput ?
Convert.ToBase64String(output) :
BitConverter.ToString(output).Replace("-", "").ToLowerInvariant();
}

C# UrlEncode To Uppercase

http://stackoverflow.com/questions/918019/net-urlencode-lowercase-problem

public static string UpperCaseUrlEncode(string s)
{
char[] temp = HttpUtility.UrlEncode(s).ToCharArray();
for (int i = 0; i < temp.Length - 2; i++)
{
if (temp[i] == '%')
{
temp[i + 1] = char.ToUpper(temp[i + 1]);
temp[i + 2] = char.ToUpper(temp[i + 2]);
}
}
return new string(temp);
}