小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ActiveScaffold本地化

 周巍的森林 2011-09-16
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í)間,但總算都解決了。
1.升級(jí)activescaffold
  首先要說明的是AS的官網(wǎng)很是詭異。里面的文檔幾乎不更新,反而github wiki上才是最新的。所以大家不要找錯(cuò)地方了。
   按照文檔,升級(jí)AS到2.3版本需要以下兩步:
   1). ruby script/plugin install git://github.com/activescaffold/active_scaffold.git
   2). ruby script/plugin install git://github.com/ewildgoose/render_component.git -r rails-2.3

  但是注意: 第二步安裝的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_()方法.代碼如下

 

Ruby代碼  收藏代碼
  1. class Object  
  2.   def as_(string, *args)  
  3.     if string  
  4.       r = I18n.t(string,*args)  
  5.       if (r =~ /^translation missing/)  
  6.         return string  
  7.       end  
  8.       return r  
  9.     else  
  10.       return string  
  11.     end  
  12.   rescue  
  13.     return string  
  14.   end  
  15. end 

   附上翻譯文件:


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

incompatible character encodings: ASCII-8BIT and UTF-8

 

這個(gè)問題會(huì)有兩種情況導(dǎo)致:

1、問題環(huán)境:模板中有<%="漢字"%>,且有UTF-8的字串變量,如I18n.t(:hello)返回的是UTF-8串。

      問題所在:Ruby 1.9.1的ERB處理編碼的方式,看代碼erb.rb

 

def compile(s)
      enc = s.encoding
      raise ArgumentError, "#{enc} is not ASCII compatible" if enc.dummy?
      s = s.dup.force_encoding("ASCII-8BIT") # don't use constant Enoding::ASCII_8BIT for miniruby
      enc = detect_magic_comment(s) || enc

.....

 

這樣,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 = {})
        if column_empty?(column_value)
          active_scaffold_config.list.empty_field_text
        elsif column_value.is_a?(Time) || column_value.is_a?(Date)
          l(column_value, :format => options[:format] || :default)
        else
          column_value.to_s
        end
      end

我查到這里返回的值就是ASCII-8BIT編碼了。查了下,從mysql_adapater出來的數(shù)據(jù)就是ASCII-8BIT的。

     解決方案:大家給點(diǎn)建議吧,SET NAME無效、database.yml的encoding無效。我最后是修改mysql_adapter

 

    def select(sql, name = nil)
          @connection.query_with_result = true
          result = execute(sql, name)
          rows = result.all_hashes
          result.free

 

#以下為新加部分

 

          if @config[:encoding] && @config[:encoding]=="utf8"
            rows.each do |row|
              row.each do |key, value|
                if (value.class == String)
                  value.force_encoding("UTF-8")
                end
              end
            end
          end
#以上為新加部分
          rows
        end

http://www./topic/355909




最主要的提示是說:

Ruby代碼  收藏代碼
  1. uninitialized constant ApplicationController  
  2. c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:443:in `load_missing_constant'  
  3. c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:80:in `const_missing'  
  4. c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:92:in `const_missing'  
  5. F:/ROR_SPACE/edepot/app/controllers/store_controller.rb:9  


而去store_controller.rb去看

Ruby代碼  收藏代碼
  1. class StoreController < ApplicationController  

也就是說找不到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問題。

Ruby代碼  收藏代碼
  1. else  
  2.   gem "rails"  
  3.   #require_gem "rails"  
  4.   require 'initializer'  


然后,運(yùn)行時(shí)有點(diǎn)升級(jí)

Ruby代碼  收藏代碼
  1. F:\ROR_SPACE\depot_l>rake db:migrate  
  2. (in F:/ROR_SPACE/depot_l)  
  3. rake aborted!  
  4. undefined method `require_gem' for main:Object  
  5. F:/ROR_SPACE/depot_l/rakefile:4  
  6. (See full trace by running task with --trace)  
  7.   
  8. F:\ROR_SPACE\depot_l>rake db:migrate  
  9. (in F:/ROR_SPACE/depot_l)  
  10. Your config/boot.rb is outdated: Run "rake rails:update".  
  11.   
  12. F:\ROR_SPACE\depot_l>rake rails:update  
  13. (in F:/ROR_SPACE/depot_l)  
  14. install -c -m 0755 c:/ruby/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/tasks/../../bin/dbconsole script/dbconsole  
  15. F:/ROR_SPACE/depot_l/app/controllers/application.rb has been renamed to F:/ROR_SPACE/depot_l/app/controllers/application_controller.rb, update your SCM as necessary  

這段說明也表明,文件名改了。

Html代碼  收藏代碼
  1. uninitialized constant FileColumn::ClassMethods::Inflector  


如果你還有classic_paginate

那么,請(qǐng)記著也要改這個(gè)

Ruby代碼  收藏代碼
  1. options[:singular_name] ||= ActiveSupport::Inflector.singularize(collection_id.to_s)     
  2. options[:class_name]  ||= ActiveSupport::Inflector.camelize(options[:singular_name])     
  3. #      options[:singular_name] ||= Inflector.singularize(collection_id.to_s)     
  4. #      options[:class_name]  ||= Inflector.camelize(options[:singular_name])    
分享到:  
評(píng)論
11 樓 utensil 2009-04-15   引用
robbin 寫道
每次升級(jí)Rails都有點(diǎn)心驚肉跳的,不單純是這些不兼容的文件修改,而是很多不實(shí)際上線運(yùn)行發(fā)現(xiàn)不了的新問題。


Robbin何不依據(jù)自己對(duì)Rails的修改,在Github上做一個(gè)兼容性和穩(wěn)定性更好的fork?這樣不僅方便大家,而且可以方便地pull回Rails。
10 樓 richyzhang 2009-03-25   引用
rainux 寫道
yangzhihuan 寫道
rainux 寫道
yangzhihuan 寫道
我的解決方法是:
新建一個(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ì)少很多.
9 樓 rainux 2009-03-25   引用
yangzhihuan 寫道
rainux 寫道
yangzhihuan 寫道
我的解決方法是:
新建一個(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 版本比較老。
8 樓 yangzhihuan 2009-03-25   引用
rainux 寫道
yangzhihuan 寫道
我的解決方法是:
新建一個(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ò)的.
7 樓 yehs220 2009-03-24   引用
QuakeWang 寫道

另外還有一些小改動(dòng),比如將原先自己寫的對(duì)rails動(dòng)態(tài)內(nèi)容輸出做gzip壓縮,現(xiàn)在可以遷移到rack,用現(xiàn)成的:
Ruby代碼  收藏代碼
  1. config.middleware.use Rack::Deflater  


怎么樣跳過Deflator?比如動(dòng)態(tài)生成的圖片什么的。
6 樓 rainux 2009-03-24   引用
yangzhihuan 寫道
我的解決方法是:
新建一個(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)改名。
5 樓 lgn21st 2009-03-22   引用
我手上的項(xiàng)目也剛剛從2.2.2升級(jí)到2.3.2,發(fā)現(xiàn)幾個(gè)稍微復(fù)雜一點(diǎn)的關(guān)聯(lián)模型上定義的named_scope執(zhí)行時(shí)報(bào)SQL語法錯(cuò)誤,花了點(diǎn)時(shí)間沒有看出問題到底在那里,只能放到明天繼續(xù)排查原因...
可能是原來在2.2.2上通過但是這么用不對(duì)
或者是2.3.2有bug,希望是前者...
4 樓 yangzhihuan 2009-03-22   引用
我的解決方法是:
新建一個(gè)Rails 2.3.2的工程,把boot.rb文件拷貝過去舊工程中.
然后執(zhí)行一下 rake rails:update
基本上就搞定了.
3 樓 wosmvp 2009-03-21   引用
JavaEye果然夠激進(jìn) 
2 樓 QuakeWang 2009-03-21   引用
在遷移JavaEye代碼到2.3,已經(jīng)遇到3個(gè)問題了:
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è)置:
Ruby代碼  收藏代碼
  1. ActionController::Base.session_options[:session_domain] = DEFAULT_ROOT_DOMAIN  
  2. ActionController::Base.asset_host = "http://#{DEFAULT_SITE_DOMAIN}"  

改成通過config設(shè)置就正常了:
Ruby代碼  收藏代碼
  1. config.action_controller.session[:domain] = DEFAULT_ROOT_DOMAIN  
  2. config.action_controller.asset_host = "http://#{DEFAULT_SITE_DOMAIN}"  


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)成的:
Ruby代碼  收藏代碼
  1. config.middleware.use Rack::Deflater  


不過2.3感覺在開發(fā)環(huán)境中比2.2要快很多,和改進(jìn)的lazy load有關(guān),在生產(chǎn)環(huán)境還須再測(cè)試對(duì)比看看。
1 樓 robbin 2009-03-21   引用
每次升級(jí)Rails都有點(diǎn)心驚肉跳的,不單純是這些不兼容的文件修改,而是很多不實(shí)際上線運(yùn)行發(fā)現(xiàn)不了的新問題。

http://hlee./blog/352598

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多