rails3.1.1版本做了比较大的改动,其中使用了第三方的gem包(其实我希望rails的核心越简单越好),基于cruby做升级也许比较容易,但是在jruby下还是遇到不少问题.下面列出来:(硬件平台windows xp)
一、jruby的版本设定为1.9
1.9.2是ruby的最新版本,与1.8.7 有一定的不同,在实际开发中,感受到最大的不同是hash的表示方法:比如在1.8.7 ,一个哈希的标准表示方法是symbol+内容,形成kv的组合,如 {:name=>'tom'},symbol的位置使用字符串也是可以的,如{'name'=>'tom'}
但是在1.9.2中,hash的表示方法有所变化
一是兼容1.8.7的symbol的表示方法
二是有更加简单的表示方法 如{name:'tom'}
目前一些插件已经基于1.9.2在做开发,比如mongoid,mongoid.org中的许多案例都是采用1.9.2特有的表示方法。
设定环境变量JRUYB_OPTS
set JRUBY_OPTS=--1.9
这样即可将jruby的运行环境改为1.9,如果希望改回来,照此办理设置为1.8即可;
你可能在1.8.7下已经安装了大量的gem包,在1.9.2的环境下,这些gem包都不能使用了。(有一个思路可以将1.8的gem包都复制到1.9的目录下,简单测试,似乎可以)
二、gem升级到1.8.0
在设定1.9.2环境的时候,安装gem的升级包存在一定的问题;
采用如下方法,似乎比较有效:(gem undate system经常性不奏效)
在1.8环境下,gem install rubygems-update
提示安装完毕后,执行update_rubygems,可完成升级
gem -v#返回版本号
三、gem包不能安装或者
gem包放在amazon的云存储中,而这个云存储与墙有过节,所以被墙了。大家只好使用vpn或者代理。
使用代理的时候,设置环境变量 set http_proxy=http://IP地址:端口号
然后就可以安装了。
或者还有一种方法:使用bundle install,在gemfile中将需要的gem包加入其中,重新设定source,如下:
source 'http://production.cf.rubygems.org/'
这种方法的不好处在于需要bundler,这个东西必须先升级,而这个gem包经常伴随rails的安装。也就是你需要首先安装rails。呵呵,这有点鸡和蛋的问题。
gem安装包的时候,出现文件目录错误的问题
gem包已经是1.8,ruby环境是1.9.2,这时候安装gem包的时候,出现文件目录错误的问题或者参数过多的问题。
解决方法是修改两个文件:
1、在jruby\lib\ruby\site_ruby\1.8\rubygems.rb 文件的 self.find_home 方法里,修改后即可。
在self.find_home中修改
File.expand_path "~"
为:
File.expand_path "."
即可
2、修改D:\jruby\lib\ruby\site_ruby\1.8\rubygems\package\tar_input.rb,将
args << { :external_encoding => Encoding::UTF_8 } if
Object.const_defined?(:Encoding)
注释即可。
四、运行过程中same file的问题
rails s运行起来之后,在浏览器输入url,出现如下类似的错误:
ActionView::Template::Error (same file: I:/Udisk.bak/jruby_app/octface/tmp/cache
/assets/sprockets%2Fa6a1d73891c8d2907c281bdff057632a.3364.58668 and I:/Udisk.bak
/jruby_app/octface/tmp/cache/assets/D0E/170/sprockets%2Fa6a1d73891c8d2907c281bdf
f057632a)
可以在命令行下使用
rake assets:clean
清除前面曾经留下的缓存内容。
五、execjs运行环境的问题
rails3.1.1的应用中需要coffee-rails这个插件,这个插件有如下包的依赖关系
coffee-rails(assets)=>coffee-script(run)=>execjs(run)=>therubyracer(develop)=>libv8(run)
而这个libv8需要c 扩展的
在bundle install的时候,由于gemfile存在如下的配置:
group :assets do
gem 'sass-rails', '~> 3.1.4'
gem 'coffee-rails', '~> 3.1.1'
gem 'uglifier', '>= 1.0.3'
end
按照缺省的方式,bundle install会循着上面的依赖关系安装libv8,最终出现bundle install错误。
假设将coffee-rails注释掉,则又会出现execjs缺乏运行环境的错误。
解决方法:
在gemfile中增加
gem 'therubyrhino'
这个therubyrhino'是therubyracer的替代品,但是依然可以提供execjs的运行环境。
最后谈一点感受,rails3.1.1使用了过多的依赖包,而一些依赖包已经不是原生的ruby代码,这对于兼容性来说是有伤害的。
补充:
最新的jruby1.6.5出来后的几点说明:
1、融合将gem库融合。之前的版本,对于ruby1.8.7和1.9.2,放在不同的gem包目录下,现在好了,两个版本的gem融合在一个目录下。
2、使用1.9.2的时候,xp下,gem安装已经不需要前面说的这么复杂:比如需要修改rubygems.rb这个文件(jruby的gem已经是1.8.9版本)。但是在vista下,仍然需要修改rubygems.rb(太神奇)
分享到:
相关推荐
JRuby的出现使得Ruby代码能够在Java环境中运行,同时保持了Ruby的动态性和灵活性,为Java开发者提供了新的开发工具和方法。 #### Ruby on Rails:Web 2.0时代的高效开发框架 Ruby on Rails(简称RoR或Rails)是一...
3. **集成JRuby和Rails到Java项目**:说明如何在Java项目中配置和使用JRuby,包括添加依赖、调用Ruby代码、以及如何利用JRuby运行Rails应用。 4. **性能优化**:探讨JRuby在Java平台上的性能表现,提供优化Ruby代码...
### NetBeans Ruby and Rails IDE with JRuby 2009 #### 一、安装NetBeans IDE及Ruby支持 - **下载IDE**:首先需要下载最新版本的NetBeans IDE,该IDE集成了对Ruby的支持。 - **安装Java SDK**:由于NetBeans是...
JRuby on Rails 是一个基于 JRuby 实现的 Ruby on Rails 框架的版本,允许开发者在 Java 平台上利用 Rails 的强大功能进行 web 应用开发。Ruby on Rails(简称 Rails)是由 David Heinemeier Hansson 创建的,它是一...
另一方面,JRuby是Ruby的一个实现,它允许在Java平台上运行Ruby代码,为Java开发者提供了利用Ruby on Rails框架的机会。《Practical JRuby on Rails Web 2.0 Projects: Bringing Ruby on Rails to Java》这本书可能...
### JRuby on Rails Web 2.0 Projects:将Ruby on Rails引入Java平台 #### JRuby简介 JRuby是一种Ruby语言的实现,它运行在Java平台上,利用了Java虚拟机(JVM)的强大功能。JRuby使得开发人员能够在Java环境中使用...
2. **Ruby on Rails 框架**:Rails是基于Ruby语言的MVC(模型-视图-控制器)框架,以其DRY(Don't Repeat Yourself)原则和生产力著称。它简化了Web开发,提供了丰富的库和工具。 3. **JDBC驱动**:由于Rails默认...
KungFu Rails大会是一个专注于Ruby on Rails技术的活动,而JRuby则是Ruby的一个重要实现,它允许开发者在Java平台上运行Ruby代码,从而利用Java的生态系统。 首先,JRuby是一个开源的、符合Ruby语言规范的实现,由...
总之,这个基于JRuby的HDFS客户端为Ruby开发者提供了与Hadoop生态系统交互的桥梁,简化了在Ruby环境中处理HDFS任务的过程。通过深入研究"rhdfs-master"源代码,开发者不仅可以学习到如何使用HDFS,还能了解如何在...
《JRuby on Rails Web 2.0 实用项目》 英文PDF + 源码
为了开始使用JRuby,你需要下载并安装JRuby,配置环境变量,然后可以像使用普通Ruby那样运行Ruby代码。开发过程中,你可以使用像`jirb`(JRuby交互式 shell)这样的工具,或者通过`bundle`管理Gem(Ruby的包管理系统...
- **重要性**:JRuby是Ruby语言的一个重要分支,使得Ruby能够在Java平台上运行,极大地扩展了Ruby的应用场景。 - **应用场景**:适用于希望将Ruby应用部署到Java平台上的开发者。 ##### 9. Oracle Tips and Tricks ...
Netbeans 6.0 JRuby on Rails demo
Netbeans 6.0 JRuby on Rails 演示 .swf
JRuby 是 Ruby 的 Java 实现,它允许 Ruby 应用在 Java 虚拟机(JVM)上运行。通过 JMX,可以远程管理并监控运行在 JVM 上的 Ruby 应用,这对于性能调优和系统管理至关重要。 ##### 6. Ruby Web 框架:深入 Waves ...
JRuby是一个开源的、基于Java平台的Ruby语言实现,它允许开发者在Ruby环境中使用Java类库,并且可以让Java应用程序无缝地调用Ruby代码。标题中的“jruby_windows_1_6_4安装文件”指的是JRuby的一个特定版本——1.6.4...