ActiveScaffold 真是优秀的一款ROR插件,其中的live_search支持中文,这点很酷。。。下午用了一会时间实现了ActiveScaffold加localization插件中文化Rails应用。关于localization插件的安装和使用,请参考下面文章 [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 启动服务器。。。OK! http://blackanger.blog.51cto.com/140924/40548 activescaffold+rails2.3.4+本地化 记录 这两天把原有一个项目从rails 2.2.2升级到了rails 2.3.4,在activescaffold插件上耗费了许多时间,但总算都解决了。 但是注意: 第二步安装的render_component插件在rails 2.3.4上并不能使用。启动时会出现 无效的方法"set_session_options"的错误。我最后是在github上找了另一个render_component插件才好的。在这里浪费了我至少2个小时。 2). ruby script/plugin install git://github.com/weplay/render_component.git 2.中文化 原来我使用的是localization插件。并在Object类中加入了as_()方法来实现中文化。可是此插件在rails 2.3.4中也会报错。于是我就直接采用rails自带的I18n国际化方法。当然还是需要加入as_()方法.代码如下
附上翻译文件: rails 2.3.2 解惑(持续更新中)1.在app\view\layouts如果有两个以application.html.erb开头的文件,比如application.html.erb, application.html.erb.bak rails 2.3.2会因无法确定而都不引用. 2.旧代码若迁移到2.3.2,会出现找不到application controller. 其实不是不见了,而是默认会去寻找application_controller.rb. 所以把app\controller下的application.rb改名为application_controller.rb即可. 3.在2.0.2版本上,render 'layout\some_layout'是可以运行的, 但在2.3.2要改成 render :file=> 'layout\some_layout' http://sinkzephyr./blog/412740 环境:Ruby 1.9.1+Rails2.3.2+ActiveScaffold 1.2RC1,错误提示: Encoding::CompatibilityError
这个问题会有两种情况导致: 1、问题环境:模板中有<%="汉字"%>,且有UTF-8的字串变量,如I18n.t(:hello)返回的是UTF-8串。 问题所在:Ruby 1.9.1的ERB处理编码的方式,看代码erb.rb
def compile(s) .....
这样,s的编码是"ASCII-8BIT",模板就是ASCII-8BIT编码,当有UTF-8的字串变量concat时,出错。 解决方案:在 enc = detect_magic_comment(s) || enc 后添加一行 s.force_encoding(enc) 2、问题环境:数据库返回UTF-8的数据时,ActiveScaffold的列表以及查看出错。 问题所在:ActiveRecord返回的数据,编码成了ASCII-8BIT,看代码list_column_helps.rb, def format_value(column_value, options = {}) 我查到这里返回的值就是ASCII-8BIT编码了。查了下,从mysql_adapater出来的数据就是ASCII-8BIT的。 解决方案:大家给点建议吧,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的定义,而当前的文件又确实有application.rb的定义。问题在那里呢? 原来是rails升级以后,application.rb默认文件名改了。这或者是“约定高于配置”的另一面,有人改了约定,我们还不太清楚。那么好吧,我把application.rb的文件名改成application_controller.rb。 接着想要运行,或者,还有一些东西要改cnfig/boot.rb里,那个典型的require_gem问题。
然后,运行时有点升级
这段说明也表明,文件名改了。
如果你还有classic_paginate 那么,请记着也要改这个
http://hlee./blog/352598 |
|
评论
Robbin何不依据自己对Rails的修改,在Github上做一个兼容性和稳定性更好的fork?这样不仅方便大家,而且可以方便地pull回Rails。
新建一个Rails 2.3.2的工程,把boot.rb文件拷贝过去旧工程中.
然后执行一下 rake rails:update
基本上就搞定了.
没有必要创建一个新工程吧,直接在 config/environment.rb 里把 Rails 版本号改成 2.3.2 之后执行 rake rails:update 即可更新所有的文件,包括 application.rb 自动改名。
我一开始就是这样干的,但是执行rake的时候会提示 boot.rb 有错的.
我从 Rails 2.2.2 升级上来的,没有问题。可能是因为你原来的 Rails 版本比较老。
用自动升级应该跟mysql类似,就是一个版本一个版本的upgrade,这样的话麻烦会少很多.
新建一个Rails 2.3.2的工程,把boot.rb文件拷贝过去旧工程中.
然后执行一下 rake rails:update
基本上就搞定了.
没有必要创建一个新工程吧,直接在 config/environment.rb 里把 Rails 版本号改成 2.3.2 之后执行 rake rails:update 即可更新所有的文件,包括 application.rb 自动改名。
我一开始就是这样干的,但是执行rake的时候会提示 boot.rb 有错的.
我从 Rails 2.2.2 升级上来的,没有问题。可能是因为你原来的 Rails 版本比较老。
新建一个Rails 2.3.2的工程,把boot.rb文件拷贝过去旧工程中.
然后执行一下 rake rails:update
基本上就搞定了.
没有必要创建一个新工程吧,直接在 config/environment.rb 里把 Rails 版本号改成 2.3.2 之后执行 rake rails:update 即可更新所有的文件,包括 application.rb 自动改名。
我一开始就是这样干的,但是执行rake的时候会提示 boot.rb 有错的.
另外还有一些小改动,比如将原先自己写的对rails动态内容输出做gzip压缩,现在可以迁移到rack,用现成的:
怎么样跳过Deflator?比如动态生成的图片什么的。
新建一个Rails 2.3.2的工程,把boot.rb文件拷贝过去旧工程中.
然后执行一下 rake rails:update
基本上就搞定了.
没有必要创建一个新工程吧,直接在 config/environment.rb 里把 Rails 版本号改成 2.3.2 之后执行 rake rails:update 即可更新所有的文件,包括 application.rb 自动改名。
可能是原来在2.2.2上通过但是这么用不对
或者是2.3.2有bug,希望是前者...
新建一个Rails 2.3.2的工程,把boot.rb文件拷贝过去旧工程中.
然后执行一下 rake rails:update
基本上就搞定了.
1. Cache Sweeper不能正常的auto load,这个ticket号称已经解决,但是还有很多人报告有问题:
http://rails./projects/8994/tickets/1977-actioncontrollercachingsweeper-autoloading-is-broken
解决方案是检查一下你的environment文件中是否有调用ActionContoller或者ActionRecord的代码,导致先它在sweeper之前加载了,JavaEye在Rails 2.2.2的代码有类似如下设置:
改成通过config设置就正常了:
2. 新加的Strategy::LocalCache是memory cache的subclass,里面有freeze的代码:@data[name] = value.freeze,导致memcache store的对象全部被freeze
零时解决方案是hack localcache
3. Collection destroy不接受id作为参数了:
http://rails./projects/8994-ruby-on-rails/tickets/2306-associationcollections-destroy-method-is-not-compatible-with-old-version
解决方案是先查询,再调用删除方法。
另外还有一些小改动,比如将原先自己写的对rails动态内容输出做gzip压缩,现在可以迁移到rack,用现成的:
不过2.3感觉在开发环境中比2.2要快很多,和改进的lazy load有关,在生产环境还须再测试对比看看。