初识jruby之安装配置jrubyonrails
1. prerequesite
假设你已经安装好了jruby,并且使用的jdk最好是1.7。
2. 安装rails
安装rails4.0.0:
C:\>jruby -S gem install rails -V
查看安装的rails版本:
C:\>jruby -S rails -v
Rails 4.0.0
3. 新建一个rails Apps
C:\>jruby -S rails new demo
并且取消bundle install,因为使用默认安装的ActiveRecord-JDBC-adapter的master分支版本目前,会导致执行rake db:migrate命令时发生wrong number of arguments calling exec_insert (5 for 3) error错误,所以,修改gemfile使用它的1.3.0.beta2版本(这个步骤是现在的权宜之计,以后肯定不必这么麻烦了。后注:此问题目前已修复):
如果使用的是sqlite数据库,则将:
gem 'activerecord-jdbcsqlite3-adapter'
改为:
gem 'activerecord-jdbcsqlite3-adapter', '1.3.0.beta2'
如果使用的mysql数据库,则将:
gem 'activerecord-jdbcmysql-adapter'
改为:
gem 'activerecord-jdbcmysql-adapter','1.3.0.beta2'
然后再进行 jruby -S bundle install 安装gem。
如果使用sqlite数据库,默认配置即可,如果使用mysql数据库,则修改database.yml,以development 环境为例,这里的username,password,host,port按照具体情况进行具体配置:
development:
adapter: mysql
encoding: utf8
reconnect: false
database: demo_development
username: user
password: user_password
host: localhost
port: 3306
最后,启动rails app:
C:\DEMO>jruby -S rails s
然而此时又出错了:
OpenSSL::Cipher::CipherError: Illegal key size: possibly you need to install Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for your JRE
要求安装JCE,到Oracle 官网上下载一个UnlimitedJCEPolicyJDK7.zip文件,解压缩后包含两个jar文件:local_policy.jar和US_export_policy.jar。将这两个文件替换$JAVA_HOME/jre/lib/security目录下两个同名文件,如,在我的电脑是就是替换C:\Program Files\Java\jdk1.7.0_25\jre\lib\security目录下两个文件。替换后,重启电脑。
此时,再jruby -S rails s启动app则可以正确运行了。
4. 配置java类路径
如果需要在rails中使用java外部类,则需要配置一下$CLASSPATH,首先,假设我们将需要的java类都放在rails_root/lib/java文件夹下。那么就在environment.rb文件中require File.expand_path(‘../ application’, __FILE__)后添加代码:
require 'java'
$CLASSPATH << File.join(Rails.root, 'lib','java')
这样,如果在该目录下有一个编译好的java类example.MyClass在rails中就可以像这样使用该类:
mc=Java::example.MyClass.new
如果还使用了外部jar,则还要添加引用jar的代码,同样在environment.rb文件中添加:
Dir.glob(File.join(Rails.root, 'lib','java',"**","*.jar")).each do |jar|
$CLASSPATH << jar
end
所以最终environment.rb文件看起来是这样的:
environment.rb
# Load the rails application
require File.expand_path('../application',__FILE__)
requrie 'java'
$CLASSPATH<<File.join(Rails.root,'lib','java')
Dir.glob(File.join(Rails.root,'lib','java','**','*.jar)).each do |jar|
$CLASSPATH << jar
end
Demo::Application.initialize!