Rails三兩事 A website introduce you ruby&rails and technology news.

28Jun/100

Ruby on Rails with Uploadify

在檔案批次上傳最早是使用Swf_upload. 但由於很難修改裡面的一些東西,而且只針對Flash.
後來尋找了一下,Plupload及Uploadify看起來比較好,有支援Falsh,SilverLight,Html5,Html4...etc
所以改用Plupload,"看起來"很好用,但實際上有一堆神秘的Bug.
最後改用Uploadify,雖然一樣有bug,但是都有解法.

最佳解法請參考 : http://railsfun.tw/viewthread.php?tid=257

其中在使用UploadifySettings時,遇到 InvalidAuthenticityToken的問題,這是Uploadify本身的問題.
解法很簡單,卻花我很多時間...
在被init的物件內加上 style='display:block;' 即可.
比如


--官方網展

http://www.uploadify.com/

--其他參考資料
1. http://railstips.org/2009/7/21/uploadify-and-rails23
2. http://jetpackweb.com/blog/2009/ ... degrade-gracefully/

6Jun/100

Heroku send by Gmail

在Rails上透過Gmail寄信是蠻簡單的.
但網站搬到Heroku後最近發現似乎寄信有問題?
一查之下才知道要裝套件,官方網站其實就有,不過自己還是做個紀錄.

1.Install Plugin

$ script/plugin install git://github.com/adamwiggins/gmail_smtp.git

2.設定帳號

$ export GMAIL_SMTP_USER=username@gmail.com
$ export GMAIL_SMTP_PASSWORD=yourpassword

3.設定Heroku

$ heroku config:add GMAIL_SMTP_USER=username@gmail.com
$ heroku config:add GMAIL_SMTP_PASSWORD=yourpassword

完成. :D

7May/101

搬移專案到Heroku. 疑難雜症.

原本使用Hosting Rails. 最近因為官方升級,很多問題.
做為一個主機商,一兩天就算了. 一週實在太超過.
版上抱怨也都得沒到解決,發Email連收也沒收到,只差沒打電話..

怕SliceHost也會有類似問題,而且也是一次先預付..索性將專案搬移到Heroku. 使用量到才需要付多一點.
過程遇到一些問題,紀錄一下.
ssh-key問題 :

$ heroku clone hobocookbook [/Data/Rails] [DrTeeth]
Initialized empty Git repository in /Data/Rails/hobocookbook/.git/
The authenticity of host 'heroku.com (75.101.141.116)' can't be established.
RSA key fingerprint is 8b:48:5e:67:0e:c9:16:47:32:f2:87:0c:1f:c8:60:ad.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'heroku.com,75.101.141.116' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
...以下省略

解法 :

heroku keys:clear; sudo ssh-keygen -t rsa; heroku keys:add /root/.ssh/id_rsa.pub

然後再做你原本想做的事情.

taps (for Database Upload) 問題 :

~$ sudo gem install taps
[sudo] password for mike:
Building native extensions.  This could take a while…
ERROR:  Error installing taps:
ERROR: Failed to build gem native extension.
/usr/bin/ruby1.8 extconf.rb install taps
checking for fdatasync() in -lrt… yes
checking for sqlite3.h… no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.
Provided configuration options:
–with-opt-dir
–without-opt-dir
–with-opt-include
–without-opt-include=${opt-dir}/include
...以下省略

解法 :

sudo aptitude install libsqlite3-dev libsqlite3-doc

taps 無法上傳 :

$ heroku db:push "~/xxx/db/xxx.sqlite3"
Loaded Taps v0.3.5
Warning: Data in the app 'xxx' will be overwritten and will not be recoverable.
Are you sure you wish to continue? (y/n)? y
Failed to connect to database:
  ArgumentError -> interning empty string

解法 :

heroku db:push --app yourappname

這個最蝦. - -

Tagged as: , , , , 1 Comment
6Oct/091

Heroku is a great host for RoR. But still has some problems

Heroku的簡便,其實也造就了他的問題.
因為不是第一次被人推薦了,所以就去官網上看看.
不過,看了就覺得並不是太想用.
除了價格昂貴,再來就是他的優點,其實也是缺點.

Heroku的優點是兩面刃

由於你只要註冊好Heroku,然後 :
sudo gem install heroku
heroku create yourapp

當你要建好專案要上傳 :
git push heroku
就上傳好了

當要做些工作,比如migrate :

heroku domains:add yourdomain.com  #(加網域名,應該是加到DNS?)
heroku rake db:migrate
heroku bundles:capture

可是,他的方便也是不便.
我是不太喜歡一直和Host方溝通,比較喜歡一次就擁有很多自主權.
所以,當有問題,我該寫信去???

問題1, 如果想增加sub domain? 更改MX records,CName,etc...?
問題2, 原先配置為Thin+Nginx. 若想改用其他?
問題3, 目前尚未支援Custom SSL.
問題4, 太貴....
問題5, 還沒想到. 如果你有解答,歡迎討論互動.

就像Xdite說的,在我看來,現在還是Project比較適合. 若要Production,太貴,也不太適合.

--後記 :
初碰Heroku可能面臨問題.
Q : Install?
A : $>sudo gem install heroku

Q : Create?
A : $>git init
$>heroku create

Q : Upload?
A : $>git push heroku YouBranchName(master)

Q : See?
A : $>heroku open

Q : No ssh public key found in /root/.ssh/id_[rd]sa.pub. You may want to specify the full path to the keyfile.
A : ssh-keygen -t rsa

Q : Move Database?
A : $>sudo gem install taps
$>heroku db:push

Q : Rename App?
A : $>git remote rm heroku
$>git remote add git@heroku.com:YOURAPPNAME.git

Q : Manage Custom Gems?
A : 1. Create a file ".gems" under folder
2. Add "yourgem --version x.x.x --source xxxxxxxx" (ex : geokit --version '>=1.5.0' )
Each Gem one line.
3. "git commit -a" & "git push heroku xxx"

4Oct/092

Rails on Ubuntu 9.04 Installtion

由於在Ubuntu下安裝Rails是一件有點煩的事,還要ln, 而且有時候有lib相依問題.
不是單純 apt-get install ruby rails 就可以.
所以就把自己安裝的經驗寫下來,下次自己安裝方便,而也可以分享.

打開Console輸入,這樣安裝包含了 Ruby, IRB, RdoC, Mysql, Sqlite, Sqlite3, 以及Libs , Dev

sudo apt-get install ruby irb rdoc libopenssl-ruby mysql-server sqlite3 sqlite libsqlite3-ruby libsqlite-ruby libmysql-ruby ruby1.8-dev

到官方下載 Rails Gem 這篇文章時,Gem為1.3.5版,點我下載1.3.5.tgz.
將之解壓縮並在Console cd到資料夾下

ruby setup.rb

再修正9.04下的安裝路徑連結錯誤

ln /usr/bin/gem1.8 /usr/bin/gem

安裝Rails

gem install rails

安裝Rake 及 Mongrel

sudo apt-get install rake mongrel

打完收工,Done!!

完成之後,可以再參考這篇Textmate on Ubuntu - Gedit

30Sep/090

更多的Google map on Rails plugins,以及Rails Gis Hacks.

睡前偶然看到這帖.
裡面寫非了蠻多在Rails上實做gmap的plugin.
除了Geokit+YM4R 還又其他 :
acts_as_geocodable , actsaslocateable .

不過看一看還是geokit比較好,至於YM4R... 我還是想自己寫...
這裡有一本寫關於gmap實作的,偶然間看到的 有興趣看看吧.

30Sep/090

Rails底下如何使用Geokit+Google Map

最近因為專案需要使用GoogleMap整合,所以查了一下相關的文章.
多數在Rails實作GoogleMap是使用 Geokit + YM4R
然而用了一下YM4R感覺綁太死了. 所以我便開始研究GmapAPI

要使用Gmap,除了要有一定的Javascript功力,還得有一個必備的 : Geokit.
由於Gmap是丟座標給他顯示查尋,所以所有地址都得先用Geokit算出座標.
在這裡有寫到關於Geokit的一些東西.
我則是直接使用Andre的Geokit
你可以直接下指令來安裝 :
依照官方說法 :

 script/plugin install git://github.com/andre/geokit-rails.git
config.gem "geokit" #請打在environment.rb內
rake gems:install

最好再裝個 : sudo gem install geokit

但是我安裝完成後,Irb底下可以使用,但Rails project內一直不能使用.
不管include 或require. 但是怎麼抓就是傳回nil的Hash.
若有跟我遇上一樣的狀況不妨試試把 config>initializer底下的geokit文件 砍了.
然後在environment.rb加上(或更改) : config.gem "andre-geokit", :lib => 'geokit', :source => "http://gems.github.com"
這樣應該就能運作.

運作正常後,就可以在需要的Controller內使用啦.
記得先 include Geokit::Geocoders
然後可以試試以下的Code :

#Controller下
    @a=Geokit::Geocoders::YahooGeocoder.geocode '140 Market St, San Francisco, CA'
    @b=Geokit::Geocoders::YahooGeocoder.geocode '789 Geary St, San Francisco, CA'
    @distance=@a.distance_to(@b)
    @heading=@a.heading_to(@b)
    @midpoint=@a.midpoint_to(@b)
    @endpoint=@midpoint.endpoint(90,10)
#View下
<=@a.ll>
<=@b.ll>
<=@distance>
<=@heading>
<=@midpoint>
<=@endpoint>

(不曉得為什麼用< %% >會不行, 請先暫時自動加%上去. 感謝)
如果正常,那麼代表你的Geokit是正常.
如果要看更多範例可以到 Git Geokit 這裡是討論群

正常之後就可以把座標一個個丟給Google Map啦.
至於Google Map則是Javascript,會再開一篇文章討論Google Map.這篇,就先這樣吧. :)

29Sep/091

Rails的Find SQL語法在多變情況下.

前陣子寫內部簡單的Search Engine,面對SQL其實突然有點失措.
在Rails底下,sql通常是下指令如
Find, Find_by.
傳統的是 Obj.find(:all,:conditions=>["sql command",vara ,varb ,varc])
然而有時要做進階的判斷,依據狀況可能有不同的參數&Conditions,又不想單純的find_by_sql.
如何改變conditions指令呢?

fcon=['']
fcon[0]="a like ? and b like ? and c like ?"
fcon << params[:a]
fcon << params[:b]
fcon << params[:c]

fcon[0]="d like ? and e like ? and f like ?"
fcon << params[:d]
fcon << params[:e]
fcon << params[:f]

Obj.find(:all,:condition=>fcon)

如此一來就不用find_by_sql,又可以達成conditions的變化.

26Sep/090

關於Rails的三兩事.

使用Rails開發專案也好一段時間. 自從上一個專案半完成之後.
緊接著學習Restful與轉換至jQuery.
教學就不多說,網路查一查應該很多.

只是對於Rails的開發速度,之所以快,現在看起來,除了語法本身的簡潔,以及一些特性(Ruby本身).
說穿了,Rails就像是一套輔助的開發工具,然後把很多Plugin聚在一起.
像ActiveRecord負責DB之類的處理. ActiveHelper負責視覺方面的輔助.. etc
雖然不能如此比較,但.. 與PHP相比,Rails就像是一個已經寫好很多功能的PHP,然後拿來修修改改的感覺.
只是Rails寫得比較好. 而之所以這麼有名,也歸功於行銷得力吧. :)

與Rails相處的半年,還算愉快.
對於初學者,Rails難的不是語法,而是觀念.
就像Restful,其實也沒什麼,就是觀念. 觀念通就會了.
而MVC架構,以及初次下指令所產生出來的一堆文件,也著實讓新手摸不清頭緒.

這半年,要感謝的,莫過於網路上的各位大神,沒有他們的文件,可能學習進度會慢更多.
也感謝前輩們的不吝指導包括CFC,JC,小B,ihower,YiRu....etc (未提及但想被刊出的請告知我. :p )

目前正努力開發第二個專案. 要寫些什麼技術性文章的話,著實不用.
因為技術還是入門階段,也就不要自曝其短了.
有機會,大家歡迎到 http://railsfun.tw
這是我比較常去的Rails討論區. :)

5Mar/090

About

這個網站寫有關Ruby On Rails及些技術的東西.