| ActiveScaffold  真是優(yōu)秀的一款ROR插件,其中的live_search支持中文,這點(diǎn)很酷。。。下午用了一會(huì)時(shí)間實(shí)現(xiàn)了ActiveScaffold加localization插件中文化Rails應(yīng)用。關(guān)于localization插件的安裝和使用,請(qǐng)參考下面文章 [url]http://blackanger.blog.51cto.com/140924/28824[/url] 值得注意的是,active_scaffold允許你整合自己喜歡的本地化插件,localization只是其中之一。 1。ActiveScaffold提供了整合國際化插件的接口,在application.rb中,底部,寫入: class Object def as_(string, *args) _(string,*args) end end 2。工程根目錄下新建lang目錄,建立de_ZH.rb文件: Localization.define('de_ZH') do |l| l.store "Reset", "重置" l.store "Search","搜索" l.store "Create New","新建" l.store "Users","用戶" ..... ........ end 3。還是application.rb中: Localization.lang = 'de_ZH' 4。environment.rb中: Rails::Initializer.run do |config| config.plugins = ['localization'] Dir.entries("#{RAILS_ROOT}/vendor/plugins/").each { |dir| config.plugins.push("#{dir}") if (File.directory?("#{RAILS_ROOT}/vendor/plugins/#{dir}/lib") or File.exist?("#{RAILS_ROOT}/vendor/plugins/#{dir}/init.rb")) } end 啟動(dòng)服務(wù)器。。。OK! http://blackanger.blog.51cto.com/140924/40548 activescaffold+rails2.3.4+本地化 記錄 這兩天把原有一個(gè)項(xiàng)目從rails 2.2.2升級(jí)到了rails 2.3.4,在activescaffold插件上耗費(fèi)了許多時(shí)間,但總算都解決了。 但是注意: 第二步安裝的render_component插件在rails 2.3.4上并不能使用。啟動(dòng)時(shí)會(huì)出現(xiàn) 無效的方法"set_session_options"的錯(cuò)誤。我最后是在github上找了另一個(gè)render_component插件才好的。在這里浪費(fèi)了我至少2個(gè)小時(shí)。 2). ruby script/plugin install git://github.com/weplay/render_component.git 2.中文化 原來我使用的是localization插件。并在Object類中加入了as_()方法來實(shí)現(xiàn)中文化。可是此插件在rails 2.3.4中也會(huì)報(bào)錯(cuò)。于是我就直接采用rails自帶的I18n國際化方法。當(dāng)然還是需要加入as_()方法.代碼如下 
 
 附上翻譯文件: rails 2.3.2 解惑(持續(xù)更新中)1.在app\view\layouts如果有兩個(gè)以application.html.erb開頭的文件,比如application.html.erb, application.html.erb.bak rails 2.3.2會(huì)因無法確定而都不引用. 2.舊代碼若遷移到2.3.2,會(huì)出現(xiàn)找不到application controller. 其實(shí)不是不見了,而是默認(rèn)會(huì)去尋找application_controller.rb. 所以把a(bǔ)pp\controller下的application.rb改名為application_controller.rb即可. 3.在2.0.2版本上,render 'layout\some_layout'是可以運(yùn)行的, 但在2.3.2要改成 render :file=> 'layout\some_layout' http://sinkzephyr./blog/412740 環(huán)境:Ruby 1.9.1+Rails2.3.2+ActiveScaffold 1.2RC1,錯(cuò)誤提示: Encoding::CompatibilityError
 這個(gè)問題會(huì)有兩種情況導(dǎo)致: 1、問題環(huán)境:模板中有<%="漢字"%>,且有UTF-8的字串變量,如I18n.t(:hello)返回的是UTF-8串。 問題所在:Ruby 1.9.1的ERB處理編碼的方式,看代碼erb.rb 
 def compile(s) ..... 
 這樣,s的編碼是"ASCII-8BIT",模板就是ASCII-8BIT編碼,當(dāng)有UTF-8的字串變量concat時(shí),出錯(cuò)。 解決方案:在 enc = detect_magic_comment(s) || enc 后添加一行 s.force_encoding(enc) 2、問題環(huán)境:數(shù)據(jù)庫返回UTF-8的數(shù)據(jù)時(shí),ActiveScaffold的列表以及查看出錯(cuò)。 問題所在:ActiveRecord返回的數(shù)據(jù),編碼成了ASCII-8BIT,看代碼list_column_helps.rb, def format_value(column_value, options = {}) 我查到這里返回的值就是ASCII-8BIT編碼了。查了下,從mysql_adapater出來的數(shù)據(jù)就是ASCII-8BIT的。 解決方案:大家給點(diǎn)建議吧,SET NAME無效、database.yml的encoding無效。我最后是修改mysql_adapter 
     def select(sql, name = nil) 
 #以下為新加部分 
           if @config[:encoding] && @config[:encoding]=="utf8" http://www./topic/355909   最主要的提示是說: 
 而去store_controller.rb去看 
 也就是說找不到application.rb的定義,而當(dāng)前的文件又確實(shí)有application.rb的定義。問題在那里呢? 原來是rails升級(jí)以后,application.rb默認(rèn)文件名改了。這或者是“約定高于配置”的另一面,有人改了約定,我們還不太清楚。那么好吧,我把a(bǔ)pplication.rb的文件名改成application_controller.rb。 接著想要運(yùn)行,或者,還有一些東西要改cnfig/boot.rb里,那個(gè)典型的require_gem問題。 
 然后,運(yùn)行時(shí)有點(diǎn)升級(jí) 
 這段說明也表明,文件名改了。 
 如果你還有classic_paginate 那么,請(qǐng)記著也要改這個(gè) 
 
 http://hlee./blog/352598 | 
|  | 
評(píng)論
Robbin何不依據(jù)自己對(duì)Rails的修改,在Github上做一個(gè)兼容性和穩(wěn)定性更好的fork?這樣不僅方便大家,而且可以方便地pull回Rails。
新建一個(gè)Rails 2.3.2的工程,把boot.rb文件拷貝過去舊工程中.
然后執(zhí)行一下 rake rails:update
基本上就搞定了.
沒有必要?jiǎng)?chuàng)建一個(gè)新工程吧,直接在 config/environment.rb 里把 Rails 版本號(hào)改成 2.3.2 之后執(zhí)行 rake rails:update 即可更新所有的文件,包括 application.rb 自動(dòng)改名。
我一開始就是這樣干的,但是執(zhí)行rake的時(shí)候會(huì)提示 boot.rb 有錯(cuò)的.
我從 Rails 2.2.2 升級(jí)上來的,沒有問題??赡苁且?yàn)槟阍瓉淼?Rails 版本比較老。
用自動(dòng)升級(jí)應(yīng)該跟mysql類似,就是一個(gè)版本一個(gè)版本的upgrade,這樣的話麻煩會(huì)少很多.
新建一個(gè)Rails 2.3.2的工程,把boot.rb文件拷貝過去舊工程中.
然后執(zhí)行一下 rake rails:update
基本上就搞定了.
沒有必要?jiǎng)?chuàng)建一個(gè)新工程吧,直接在 config/environment.rb 里把 Rails 版本號(hào)改成 2.3.2 之后執(zhí)行 rake rails:update 即可更新所有的文件,包括 application.rb 自動(dòng)改名。
我一開始就是這樣干的,但是執(zhí)行rake的時(shí)候會(huì)提示 boot.rb 有錯(cuò)的.
我從 Rails 2.2.2 升級(jí)上來的,沒有問題??赡苁且?yàn)槟阍瓉淼?Rails 版本比較老。
新建一個(gè)Rails 2.3.2的工程,把boot.rb文件拷貝過去舊工程中.
然后執(zhí)行一下 rake rails:update
基本上就搞定了.
沒有必要?jiǎng)?chuàng)建一個(gè)新工程吧,直接在 config/environment.rb 里把 Rails 版本號(hào)改成 2.3.2 之后執(zhí)行 rake rails:update 即可更新所有的文件,包括 application.rb 自動(dòng)改名。
我一開始就是這樣干的,但是執(zhí)行rake的時(shí)候會(huì)提示 boot.rb 有錯(cuò)的.
另外還有一些小改動(dòng),比如將原先自己寫的對(duì)rails動(dòng)態(tài)內(nèi)容輸出做gzip壓縮,現(xiàn)在可以遷移到rack,用現(xiàn)成的:
怎么樣跳過Deflator?比如動(dòng)態(tài)生成的圖片什么的。
新建一個(gè)Rails 2.3.2的工程,把boot.rb文件拷貝過去舊工程中.
然后執(zhí)行一下 rake rails:update
基本上就搞定了.
沒有必要?jiǎng)?chuàng)建一個(gè)新工程吧,直接在 config/environment.rb 里把 Rails 版本號(hào)改成 2.3.2 之后執(zhí)行 rake rails:update 即可更新所有的文件,包括 application.rb 自動(dòng)改名。
可能是原來在2.2.2上通過但是這么用不對(duì)
或者是2.3.2有bug,希望是前者...
新建一個(gè)Rails 2.3.2的工程,把boot.rb文件拷貝過去舊工程中.
然后執(zhí)行一下 rake rails:update
基本上就搞定了.
1. Cache Sweeper不能正常的auto load,這個(gè)ticket號(hào)稱已經(jīng)解決,但是還有很多人報(bào)告有問題:
http://rails./projects/8994/tickets/1977-actioncontrollercachingsweeper-autoloading-is-broken
解決方案是檢查一下你的environment文件中是否有調(diào)用ActionContoller或者ActionRecord的代碼,導(dǎo)致先它在sweeper之前加載了,JavaEye在Rails 2.2.2的代碼有類似如下設(shè)置:
改成通過config設(shè)置就正常了:
2. 新加的Strategy::LocalCache是memory cache的subclass,里面有freeze的代碼:@data[name] = value.freeze,導(dǎo)致memcache store的對(duì)象全部被freeze
零時(shí)解決方案是hack localcache
3. Collection destroy不接受id作為參數(shù)了:
http://rails./projects/8994-ruby-on-rails/tickets/2306-associationcollections-destroy-method-is-not-compatible-with-old-version
解決方案是先查詢,再調(diào)用刪除方法。
另外還有一些小改動(dòng),比如將原先自己寫的對(duì)rails動(dòng)態(tài)內(nèi)容輸出做gzip壓縮,現(xiàn)在可以遷移到rack,用現(xiàn)成的:
不過2.3感覺在開發(fā)環(huán)境中比2.2要快很多,和改進(jìn)的lazy load有關(guān),在生產(chǎn)環(huán)境還須再測(cè)試對(duì)比看看。