2010年10月21日 星期四
remote git get back for the future
以後要更小心 不然很麻煩
想把小更動併進上一次的commit,一般來說只要做soft commit 就好了。但問題是我在上一回的commit後就push上github,併了新變更的commit和上傳的版本不同。push上去一回是災難,要是有人想pull下來又是另一場災難。於是順便被做了機會教育。
在local branch裡,再做一支branch(後面代稱二號枝)。把原本已經變動的一號枝用git rebase、像是剪下貼上一樣貼去二號枝。原本的一號枝再pull一次remote,讓兩邊資料同步。
再到二號枝,用git rebase將新的變動貼回一號枝。一路由git rebase做兩邊資料的合併(決定分叉部份的code去留),也就是將git merge的工作拆開逐步作業。結束後原本的一號枝就能繼續無痛同步remote,二號枝也能砍了。
這就是上面地鐵圖的由來。
2010年10月14日 星期四
[memo]mysql can't find /tmp/mysql.sock on Mac 10.6
裝mac的mysql(brew install mysql)時遇到的問題 記錄一下解法
brew install mysql
mysql_install_db
cp /usr/local/Cellar/mysql/5.1.47/com.mysql.mysqld.plist ~/Library/LaunchAgents
launchctl load -w ~/Library/LaunchAgents/com.mysql.mysqld.plist
#mysql_secure_installation
mysqladmin -u root password 'new-password'
mysqladmin -u root -h MacBook-Pro.local password 'new-password'
brew install mysql
mysql_install_db
cp /usr/local/Cellar/mysql/5.1.47/com.mysql.mysqld.plist ~/Library/LaunchAgents
launchctl load -w ~/Library/LaunchAgents/com.mysql.mysqld.plist
#mysql_secure_installation
mysqladmin -u root password 'new-password'
mysqladmin -u root -h MacBook-Pro.local password 'new-password'
2010年8月17日 星期二
把Ubuntu的gedit改成適合Railist的模樣
Rails又寫了一段時日。愈來愈多的plugin與gem逼迫我開始脫離使用NetBeans。雖然NetBeans仍有辦法做到支援gem下的rake等工作,但中間花的代價感覺實在不值得、不如先罷手不用NetBeans、順便練習原始的指令法。
於是開始用起vim與gedit...後來發現有人寫過適合網頁編程人員用的gedit,改一改倒也能抵過不少NetBeans的重點功能(比如我很依賴的autocomplete)。今天又挖到一個更棒的東西,GMate。照作者的說法。這主要是參考Rails界有名的textmate(這支IDE的最佳代言人就是RailCasts站長Ryan)。包括縮排、render切割等Rails常用的手續都有做,對於使用Ubuntu的Railist如我真的是很棒的福音\OvO/
於是開始用起vim與gedit...後來發現有人寫過適合網頁編程人員用的gedit,改一改倒也能抵過不少NetBeans的重點功能(比如我很依賴的autocomplete)。今天又挖到一個更棒的東西,GMate。照作者的說法。這主要是參考Rails界有名的textmate(這支IDE的最佳代言人就是RailCasts站長Ryan)。包括縮排、render切割等Rails常用的手續都有做,對於使用Ubuntu的Railist如我真的是很棒的福音\OvO/
2010年8月10日 星期二
繼承,多型,多對多表單指定的用法
情境解題:
一個流程有三階段的作業單要填寫(Order , Buildup , Endup ),中間都會經過驗收簽名(Check_order , ect)。
驗收簽名的資料都相似,因此利用Model繼承讓他們住在同一個資料表(Checklist)。利用N:M的多對多接續(參照)。
Rails的多對多是利用欄位名默認對照,但現在子資料表己經變成多型,從上方的表單無法找到指定的驗收資料。一般教學不大常提到這點,昨天花了點時間才試出。
一個流程有三階段的作業單要填寫(Order , Buildup , Endup ),中間都會經過驗收簽名(Check_order , ect)。
驗收簽名的資料都相似,因此利用Model繼承讓他們住在同一個資料表(Checklist)。利用N:M的多對多接續(參照)。
Rails的多對多是利用欄位名默認對照,但現在子資料表己經變成多型,從上方的表單無法找到指定的驗收資料。一般教學不大常提到這點,昨天花了點時間才試出。
#最上頭的Model Order.rb
#has_one :check_list , :as => :table
#過去一般用到這行,指定checklist便可,但現在要做的是指定checklist下的check_order,直接用下方的指定便可
has_one :check_order , :as => :table , :conditions => ["type = ? " , 'CheckOrder']
#中間層的Checklist.rb
self.inheritance_column = :type #歸類三種子表格的欄位名
belongs_to :check_order
belongs_to :check_buildup
belongs_to :check_endup
belongs_to :table , :polymorphic => true
#最下層的check_order.rb Class名改掉繼承便可
class CheckOrder < CheckList
end
2010年7月27日 星期二
authlogic memo
記錄自己常用的authlogic設定
# 關閉email驗證
# 關閉email驗證
acts_as_authentic do |c|
c.validate_email_field = false
end
2010年5月27日 星期四
[Gem]實作spread sheet
每個工程師都會遇到的挑戰就是處理微軟派的資料(在這裡假設你不是用微軟的作業系統在寫程式,this is Ruby on Rails blog!:D) 我在需求名單下剛好就有客戶說要有由Excel檔匯資料入庫的功能,於是從roo一路尋找,直到找出spread sheet。但真正實作卻是這週才做好的。
因為本人有點IO恐懼症。看了老半天的RubyIO,實在是不想這樣慢慢磨。於是直接開一個Model用Paperclip處理檔案上傳的問題(因為也剛好有三種EXCEL表要處理,開一個Model還不算太浪費(藉口啊!))
檔案可以穩定上傳後(Paperclip教學請參見RaislCasts,非圖型檔案只要再放上檔案位址便能直接連結下載)。再來就能開始寫匯入了,參考官網的說明。簡單的說我要做的就是抓出我要的資料頁並指定從哪一行開始,再來行迴圈與陣列應用create 或update便可。
這是做好後的結論。在還沒做好前,我一直遇到
後來實驗出來的結論如下:官網的教學手冊一切都沒有錯,但是你的Excel要是有巨集或是自訂的選擇器可能會引爆炸彈(我被這個炸了好幾次,後來特別存了把auto filter都關掉的版本試、總之盡量讓你的Excel表陽春,至於如何讓客戶方便使用我還在研究);中文匯入一切沒問題、想避開空資料就自己過濾一下Nil也罷;你的日期只要格式看起來有點像、欄位會自動幫你轉好格式(但是如果填的是民國年次就要再自己加個11年,因為自動轉是幫你加上1900年lol);在炸程式時先確認是否自己的model都有下對(三種表格寫到亂的下場就是欄位一直看走眼,欄位名稱下錯當然也是死路一條...)
如果你不要做匯入的動作,直接開啟顯示在畫面也可以。總之切記迴避Nil insert,一切都平安。
因為本人有點IO恐懼症。看了老半天的RubyIO,實在是不想這樣慢慢磨。於是直接開一個Model用Paperclip處理檔案上傳的問題(因為也剛好有三種EXCEL表要處理,開一個Model還不算太浪費(藉口啊!))
檔案可以穩定上傳後(Paperclip教學請參見RaislCasts,非圖型檔案只要再放上檔案位址便能直接連結下載)。再來就能開始寫匯入了,參考官網的說明。簡單的說我要做的就是抓出我要的資料頁並指定從哪一行開始,再來行迴圈與陣列應用create 或update便可。
這是做好後的結論。在還沒做好前,我一直遇到
can't dup NilClass、undefined method `XXXX' for nil:NilClass等等的問題。後來實驗出來的結論如下:官網的教學手冊一切都沒有錯,但是你的Excel要是有巨集或是自訂的選擇器可能會引爆炸彈(我被這個炸了好幾次,後來特別存了把auto filter都關掉的版本試、總之盡量讓你的Excel表陽春,至於如何讓客戶方便使用我還在研究);中文匯入一切沒問題、想避開空資料就自己過濾一下Nil也罷;你的日期只要格式看起來有點像、欄位會自動幫你轉好格式(但是如果填的是民國年次就要再自己加個11年,因為自動轉是幫你加上1900年lol);在炸程式時先確認是否自己的model都有下對(三種表格寫到亂的下場就是欄位一直看走眼,欄位名稱下錯當然也是死路一條...)
如果你不要做匯入的動作,直接開啟顯示在畫面也可以。總之切記迴避Nil insert,一切都平安。
2010年3月30日 星期二
2010年3月12日 星期五
Searchlogic with prawn &2
這幾天在寫一份表單。因為懶惰‧於是舖了一張不經過post request的表單。再用searchlogic過濾條件,動態顯示客戶要的資料(基本教學見railscast)。記錄一下做這些事所遇到的問題
由於搜尋條件有一項是要用月份過濾,而日期格式的轉換實在是沒那閒時間慢慢研究,最後直接用Custom associated scopes的named scopes去定義所有月份,sql語法採用「month(欄位) = 月數」,取前端的boolean值確認條件(我是很想直接數字切進named scopes,但searchlogic的說明書內找不到方法,才會用此下策先做出個可用的替代品)
之後再加上prawn&prawnto(我必需要說我愛蝦子,這工具花了我兩小時就把第一張表格含下面會提的連結印出來),前陣子初次練習時不知哪裡鬼打牆...我猜說不定就是因為那時OS還是window...一直不順利,這次用半小時初步的畫面就做出來了(參考上連結,如果覺得Ryan的教學太神奇,這裡還有一篇比較簡易的教學文,另外還要注意這些教學都沒提到routes的format定義問題,如果發現網址一直吐錯誤,很可能是routes沒有設定網址的規格)
另外中文使用者還需要注意到,使用prawn時,得自己在gem內補上中文字型(參考),再到pdf的頁面下設定字型PATH
最後是以前從沒遇過的問題,要在有searchlogic的參數下輸出pdf。假設搜尋後的url是http://lo.cal.host/reprot?search=xxx,那pdf的網址要是 http://lo.cal.host/reprot.pdf?search=xxx
要能印出上面這種網址,最後也是用暴力破解法:
我提過了...我的基本功很差的...為了查request有哪些能用,就花了我一小時....(參考見此和此)
引一下筆記
由於搜尋條件有一項是要用月份過濾,而日期格式的轉換實在是沒那閒時間慢慢研究,最後直接用Custom associated scopes的named scopes去定義所有月份,sql語法採用「month(欄位) = 月數」,取前端的boolean值確認條件(我是很想直接數字切進named scopes,但searchlogic的說明書內找不到方法,才會用此下策先做出個可用的替代品)
之後再加上prawn&prawnto(我必需要說我愛蝦子,這工具花了我兩小時就把第一張表格含下面會提的連結印出來),前陣子初次練習時不知哪裡鬼打牆...我猜說不定就是因為那時OS還是window...一直不順利,這次用半小時初步的畫面就做出來了(參考上連結,如果覺得Ryan的教學太神奇,這裡還有一篇比較簡易的教學文,另外還要注意這些教學都沒提到routes的format定義問題,如果發現網址一直吐錯誤,很可能是routes沒有設定網址的規格)
另外中文使用者還需要注意到,使用prawn時,得自己在gem內補上中文字型(參考),再到pdf的頁面下設定字型PATH
pdf.font "#{Prawn::BASEDIR}/data/fonts/LiHeiProPC.ttf"最後是以前從沒遇過的問題,要在有searchlogic的參數下輸出pdf。假設搜尋後的url是http://lo.cal.host/reprot?search=xxx,那pdf的網址要是 http://lo.cal.host/reprot.pdf?search=xxx
要能印出上面這種網址,最後也是用暴力破解法:
request.path_parameters['controller'] +".pdf?"+ request.env["QUERY_STRING"] 我提過了...我的基本功很差的...為了查request有哪些能用,就花了我一小時....(參考見此和此)
引一下筆記
@client_ip = request.env["HTTP_X_FORWARDED_FOR"] #取得使用者的IP地址
@client_browser = request.env["HTTP_USER_AGENT"] #取得使用者浏览器信息
@http_referer = request.env["HTTP_REFERER"] #取得使用者來源(referer)
@client_language = request.env["HTTP_ACCEPT_LANGUAGE"] #取得使用者支持的语言
@server_port = request.env["SERVER_PORT"]
@request_uri = request.env["REQUEST_URI"]
@content_length = request.env["CONTENT_LENGTH"].to_i
@rails_relative_url_root = request.env["RAILS_RELATIVE_URL_ROOT"]
@script_name = request.env["SCRIPT_NAME"]
@request_method = request.env["REQUEST_METHOD"]
@path_info = request.env["PATH_INFO"]
@query_string = request.env["QUERY_STRING"]
@server_software = request.env["SERVER_SOFTWARE"]
@https = request.env["HTTPS"]
@potocol = request.env["HTTP_X_FORWARDED_PROTO"]
@content_type = request.env["CONTENT_TYPE"]
2010年2月25日 星期四
2010年1月29日 星期五
complex form in TABLE
在照著RailsCast的Complex Form(現在要參考Nested Model Form了).因為自己需要寫在表格(TABLE)內,為了要讓分頁能乖乖一行行排在表格內,需要做點修改。
然後就這樣摸了兩個月(死眼)。
先看魔術表演的說明書
page.insert_html後面 after一參數為指定要第二個參數 repairdetail 的畫面標籤要after他(也可before等,railsCast是用div 在這裡我是指定tr標籤,對我的關鍵就是要換成tr T_T。順便一提,tr標籤就沒有bottom或top的用法了,會沒有反應),然後再呼叫partial分頁名,內容是
然後就這樣摸了兩個月(死眼)。
先看魔術表演的說明書
<%= link_to_function "新增資料" do |page| page.insert_html :after, :repairdetail , :partial => 'editdetail' , :object => Repairdetail.new
end %> page.insert_html後面 after一參數為指定要第二個參數 repairdetail 的畫面標籤要after他(也可before等,railsCast是用div 在這裡我是指定tr標籤,對我的關鍵就是要換成tr T_T。順便一提,tr標籤就沒有bottom或top的用法了,會沒有反應),然後再呼叫partial分頁名,內容是
Repairdetail.new就這樣,因為沒有基礎而卡了那麼久,想來就嘔……
2010年1月22日 星期五
[bug]正常返回前頁
session[:original_uri] = request.request_uri
原本拿來作為返回上一頁的功能.卻在修改程式不久出現嚴重的問題.會自己連去莫名的地方
解法已忘了在哪裡找的.簡單來說.因為routing裡有不健康的link.因此卡住.最後自己找到.是因為我將新加的javascript內圖片砍除.但語法內連結還在.只要把連結清乾淨就行了
原本拿來作為返回上一頁的功能.卻在修改程式不久出現嚴重的問題.會自己連去莫名的地方
解法已忘了在哪裡找的.簡單來說.因為routing裡有不健康的link.因此卡住.最後自己找到.是因為我將新加的javascript內圖片砍除.但語法內連結還在.只要把連結清乾淨就行了
訂閱:
意見 (Atom)
