`
s8186255
  • 浏览: 87106 次
  • 性别: Icon_minigender_1
  • 来自: 新疆乌鲁木齐
社区版块
存档分类
最新评论

基于jruby(ruby1.9.2)的rails3.1.1的运行环境的说明

 
阅读更多

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 On Rails WEB2.0

    JRuby的出现使得Ruby代码能够在Java环境中运行,同时保持了Ruby的动态性和灵活性,为Java开发者提供了新的开发工具和方法。 #### Ruby on Rails:Web 2.0时代的高效开发框架 Ruby on Rails(简称RoR或Rails)是一...

    JRuby和Rails-让Ruby语言融入于Java项目.rar

    3. **集成JRuby和Rails到Java项目**:说明如何在Java项目中配置和使用JRuby,包括添加依赖、调用Ruby代码、以及如何利用JRuby运行Rails应用。 4. **性能优化**:探讨JRuby在Java平台上的性能表现,提供优化Ruby代码...

    NetBeans Ruby and Rails IDE with JRuby 2009

    ### NetBeans Ruby and Rails IDE with JRuby 2009 #### 一、安装NetBeans IDE及Ruby支持 - **下载IDE**:首先需要下载最新版本的NetBeans IDE,该IDE集成了对Ruby的支持。 - **安装Java SDK**:由于NetBeans是...

    jruby_on_rails

    JRuby on Rails 是一个基于 JRuby 实现的 Ruby on Rails 框架的版本,允许开发者在 Java 平台上利用 Rails 的强大功能进行 web 应用开发。Ruby on Rails(简称 Rails)是由 David Heinemeier Hansson 创建的,它是一...

    Code Review&JRuby on Rails

    另一方面,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

    ### JRuby on Rails Web 2.0 Projects:将Ruby on Rails引入Java平台 #### JRuby简介 JRuby是一种Ruby语言的实现,它运行在Java平台上,利用了Java虚拟机(JVM)的强大功能。JRuby使得开发人员能够在Java环境中使用...

    结合使用 Oracle 和 Ruby on Rails 教程

    2. **Ruby on Rails 框架**:Rails是基于Ruby语言的MVC(模型-视图-控制器)框架,以其DRY(Don't Repeat Yourself)原则和生产力著称。它简化了Web开发,提供了丰富的库和工具。 3. **JDBC驱动**:由于Rails默认...

    2009 KungFu Rails大会JRuby演讲PPT

    KungFu Rails大会是一个专注于Ruby on Rails技术的活动,而JRuby则是Ruby的一个重要实现,它允许开发者在Java平台上运行Ruby代码,从而利用Java的生态系统。 首先,JRuby是一个开源的、符合Ruby语言规范的实现,由...

    hdfs client for ruby (just jruby) hdfs客户端 基于jruby.zip

    总之,这个基于JRuby的HDFS客户端为Ruby开发者提供了与Hadoop生态系统交互的桥梁,简化了在Ruby环境中处理HDFS任务的过程。通过深入研究"rhdfs-master"源代码,开发者不仅可以学习到如何使用HDFS,还能了解如何在...

    Apress - Practical JRuby on Rails Web 2.0 Projects (Sep 2007)

    《JRuby on Rails Web 2.0 实用项目》 英文PDF + 源码

    Ruby-JRuby一个Ruby语言的Java实现

    为了开始使用JRuby,你需要下载并安装JRuby,配置环境变量,然后可以像使用普通Ruby那样运行Ruby代码。开发过程中,你可以使用像`jirb`(JRuby交互式 shell)这样的工具,或者通过`bundle`管理Gem(Ruby的包管理系统...

    rails magazine issue 4

    - **重要性**:JRuby是Ruby语言的一个重要分支,使得Ruby能够在Java平台上运行,极大地扩展了Ruby的应用场景。 - **应用场景**:适用于希望将Ruby应用部署到Java平台上的开发者。 ##### 9. Oracle Tips and Tricks ...

    Netbeans 6.0 JRuby on Rails 演示

    Netbeans 6.0 JRuby on Rails demo

    Netbeans 6.0 JRuby on Rails 演示 .swf

    Netbeans 6.0 JRuby on Rails 演示 .swf

    rails magazine issue 3

    JRuby 是 Ruby 的 Java 实现,它允许 Ruby 应用在 Java 虚拟机(JVM)上运行。通过 JMX,可以远程管理并监控运行在 JVM 上的 Ruby 应用,这对于性能调优和系统管理至关重要。 ##### 6. Ruby Web 框架:深入 Waves ...

    jruby_windows_1_6_4安装文件

    JRuby是一个开源的、基于Java平台的Ruby语言实现,它允许开发者在Ruby环境中使用Java类库,并且可以让Java应用程序无缝地调用Ruby代码。标题中的“jruby_windows_1_6_4安装文件”指的是JRuby的一个特定版本——1.6.4...

Global site tag (gtag.js) - Google Analytics