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/
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
完成.
搬移專案到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
這個最蝦. - -
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"
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
更多的Google map on Rails plugins,以及Rails Gis Hacks.
睡前偶然看到這帖.
裡面寫非了蠻多在Rails上實做gmap的plugin.
除了Geokit+YM4R 還又其他 :
像acts_as_geocodable , actsaslocateable .
不過看一看還是geokit比較好,至於YM4R... 我還是想自己寫...
這裡有一本寫關於gmap實作的,偶然間看到的
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.這篇,就先這樣吧.
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的變化.
關於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討論區.

