顯示具有 Ruby on rails 標籤的文章。 顯示所有文章
顯示具有 Ruby on rails 標籤的文章。 顯示所有文章

2010年3月11日 星期四

將Ruby on rails的網頁用iframe嵌入時, 在ie6遇到的問題

就是這一行, 花了半天的時間在找BUG
response.headers['P3P'] = 'CP="CAO PSA OUR"', put in a before_filter action in application.rb
終於解決了.

事發原因:
把rails的網頁利用iframe的方式放到php的網頁,
而rails的網頁裡面有使用到login的功能, 也有用到session儲存狀態.
用了Safari, Firefox, Chrome都沒有問題, 偏偏只有IE 6有問題.

一開始發現有錯誤訊息
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):

針對此訊息才發現有可能是被誤判為CSRF (Cross-Site Request Forgery) 攻擊, 所以根據Rails api的說明,
我在controller加上了
protect_from_forgery :except => :create
和在我的form加上
<%= javascript_tag "window._token = '#{form_authenticity_token}'" %>
雖然說明裡頭有提到是適用於非form_for helper產生的form, 但我還是試試看

結果, 是沒有該錯誤訊息, 但是也沒有正確的結果.
還是無法正常的login, 後來更進一步檢查, 程式可以正常的判斷是否是輸入正確的帳號和密碼,
但卻無法儲存session, 更酷的是, 我的session只存活在login之後的第一個頁面, 接下來session就不見了,

後來試著去google搜尋, "rails session reset ie6 "
才更明白我的問題是屬於"跨域session丢失問題"
參考了以下資料
http://www.blogjava.net/leekiang/archive/2010/01/28/311054.html
http://blog.javaflag.com/blog/?p=484
http://www.ruby-forum.com/topic/107696

終於找到問題徵結點, 還是ie6的問題
是Platform for Privacy Preferences Project (P3P) specification搞的鬼

2010年2月5日 星期五

如何將Ruby on rails的網頁輸出至excel

這個問題困擾了我幾天, 因為一想到excel就想到要將檔案轉成xls格式,可是,xls格式是微軟的,應該沒這麼輕易使用才是, 上google大神找也是找不到什麼簡便的方法, 後來就退而求其次, 改採csv(comma-separated values )格式餵給excel好了, 這次就比較簡單, 找到了comma, 然後照github上的說明依樣畫葫蘆其實就可以使用了, 只是, 接著就有個大問題,

輸出中文會有亂碼

解了很久還是解不出來, 不知該從哪裡動手腳, 所以又再找其他方法.
最後突然靈機一動, xml, 之前都沒想到, office excel, word 都可以吃xml格式的檔案, 哈哈!!

而且Ruby on rails有支援輸出xml, 這真是太方便了.
這裡就沒有中文亂碼問題啦!!

最後, 又有點小問題, 想要改成讓使用者點該連結時直接下載,
當下是想到可以用javascript, 然後又想到jquery, 最後才想到, 會不會ruby on rails本身就有呢?
果不其然, 是有這個method, send_file, 只是, 用了半天, 才發現, 他的路徑參數是使用系統路徑, 例如/webapps/rails/public/file/image.jpg, 而不是網址, 這也真的滿令人困擾的, 試半天都不行, 後來才用轉去看看別的語言和javascript是如何做到, 最後才發現, 只要更改header中的content-disposition即可, 也就是在xml.builder中, 加上
response.headers['Content-Disposition'] = 'attachment; filename=thefile.csv'
其實一開始也有找到此方法, 只是當初使用時沒有反應, 所以就沒理他了. 沒想到死馬當活馬醫, 就這麼神奇的有反應了, 哈哈, 不過我想應該是有網站cache的關係, 後來有問題時, 就強迫重新啟動伺服器就沒問題啦.

2010年1月28日 星期四

如何在Ruby on rails中輸出中文pdf

目前最好用的輸出pdf工具應該算是prawn
裝prawn和prawnto之後
一開始用時覺得很糟糕, 英文輸出很正常, 可是中文卻是亂碼或是出現框框, 即使是使用官網展示的utf8網頁, 但後來才發現
其實很簡單
只要將中文字型複制到下面提到的路徑, 並在程式中選好字型(.ttf)即可正常顯示唷!!
我用的是Snow leopard, 路徑是在/Library/Ruby/Gems/1.8/gems/prawn-core-0.7.1/data/fonts

另外, 在使用prawnto時要注意版本問題, 官網上提供的範例不一定可以使用, 因為官網是用舊的api, 像是我要用到控制Table的寬度時, 官網的範例就失效了, 後來才找到新的API參考, http://prawn.majesticseacreature.com/docs/prawn-layout/classes/Prawn/Table.html#M000002

2009年12月2日 星期三

Yet another role-based authorization system for Rails

這是一個在Ruby on rails中滿好用的外掛,專門做角色控制(Role control)和存取控制(Access control),官網的做法的很詳細,照著做就行了。

唯一有個小問題,官網雖然強調我們不需要變動目前的user model,但是卻忘了做一個動作,

class User < ActiveRecord::Base
  acts_as_authorization_subject
  has_and_belongs_to_many :roles
end

class Role < ActiveRecord::Base
   acts_as_authorization_role
   has_and_belongs_to_many :users
end

加上紅色的那兩段,才可以執行user.roles,知道目前使用者所扮演的角色。

P.S. 目前據我了解,access control的部份要寫在controller裡,不知有沒有比較簡易的方法操作呢? @@

2009年11月13日 星期五

Cleaning code

Presenter Pattern & Cells Plugin
可參考Dmyto Shteflyuk所寫的文章,可簡化Code的複雜度,把Code放在適當的位置,看了一下,目前是有看沒有懂,哈哈,不過,重點應是在controller的fragment_exist?和view的cache。

jsvars
一個可以讓javascript和ruby on rails無縫溝通的plugin,這真的很方便。
附上一個例子
In Controller : jsvars[:railsEnv] = RAILS_ENV
In JavaScript: railsEnv = “production”

Authentication, Helpful Libraries, & Optimization

  • ModPorter
    可以同時上傳大檔案(像是flickr)
    只是要搭配Apache
  • Devise,新的認證外掛
    好像比Authlogic還好
    介紹文章
  • ruby-openid
    Rails and OpenID: Start Your Engines
    有機會可以來試試
  • Validatious 2.0
    一個幫你做好驗證的描述語言,感覺不錯,不用再想說要抓哪一個Regular Expression拿來用,不過如果已經有在用自己的驗證方式的話,應該就不需要換了,on-the-fly validation的特色不錯。
  • Bullet
    據說是一個幫助我們檢查databse query有沒有最佳化,有機會再來試,目前還沒有感覺到慢
  • Bloat(參考文章:That’s Not a Memory Leak, It’s Bloat)
    如果發現ruby on rails的記憶體吃太多,可以參考此文章

以上資料可以在Community Highlights中得到