用于rake db:migrate任务的JRuby JDBC设置

时间:2015-12-31 21:45:26

标签: postgresql jdbc sinatra jruby sinatra-activerecord

我有一个ruby Sinatra应用程序和gem pg使用一些Java开源应用程序,我切换到jruby。这是jruby -S rake db:migrate的输出。

NoMethodError: undefined method `get_oid_type' for #<ActiveRecord::ConnectionAdapters::JdbcAdapter:0x294f9d50>
api/tasks/db.rake:18:in `block in (root)'

rake file

require 'active_record'
require 'jdbc/postgresql'

namespace :db do
  task(:environment) do
    ActiveRecord::Base.establish_connection(
    :adapter => 'jdbc',
    :driver => 'org.postgresql.Driver',
    :url => 'jdbc:postgresql:db_name',
    :username => 'username',
    :password => 'password'
    )
  end

  desc 'Migrate the MOT core models (options: VERSION=x, VERBOSE=false)'
  task :migrate => :environment do
    ActiveRecord::Migration.verbose = true
    ActiveRecord::Migrator.migrate "#{File.dirname(__FILE__)}/../db/migrate", ENV['VERSION'] ? ENV['VERSION'].to_i : nil
  end

  desc 'Rolls the schema back to the previous version of MOT core model(specify steps w/ STEP=n).'
  task :rollback => :environment do
    step = ENV['STEP'] ? ENV['STEP'].to_i : 1
    ActiveRecord::Migrator.rollback "#{File.dirname(__FILE__)}/../db/migrate", ENV['VERSION'] ? ENV['VERSION'].to_i : step
  end
end

db.rake:#18

ActiveRecord :: Migrator.migrate&#34;#{File.dirname( FILE )} /../ db / migrate&#34;,ENV [&#39; VERSION&#39; ]? ENV [&#39; VERSION&#39;]。to_i:nil

我正在使用jdbc运行postgresql。

更新

我将postgresql.jar添加到我的jruby路径(在我的mac中由brew安装的jruby),我收到同样的错误。我还删除了jar文件,并且发现了驱动程序错误。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

只需在配置中使用 adapter:postgresql ,它就可以正常工作。

答案 1 :(得分:-1)

我找到了解决方案。

首先确保您的 Gemfile

中包含以下内容
gem 'activerecord-jdbc-adapter', :require => 'arjdbc'
gem 'activerecord-jdbcpostgresql-adapter'

然后在数据库迁移任务中,这是环境设置:

task(:environment) do
    ActiveRecord::Base.establish_connection(
    :adapter => 'jdbcpostgresql',
    :driver => 'org.postgresql.Driver',
    :url => 'jdbc:postgresql://localhost/YOUR_DATABASE_NAME'
    )
  end

这也是用于开发的 database.yaml

development:
    adapter: jdbcpostgresql
    driver: org.postgresql.Driver
    encoding: unicode
    url: jdbc:postgresql://localhost/YOUR_DATABASE_NAME
    username: USER_NAME
    password: PASSWORD

在Sinatra应用程序上享受Jruby的JDBC !!!!