在 Heroku 上需要 jruby pg 时没有要加载的文件

No such file to load when requiring jruby pg on Heroku

我想在 jRuby 应用程序中使用 jRuby pg gem。 gem 运行 在本地很好,但是当 运行 在 heroku 上时它无法加载 pg gem.

LoadError: no such file to load -- pg
  require at org/jruby/RubyKernel.java:1071
  require at /app/vendor/ruby-1.9.3-jruby-1.7.19/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:54
   (root) at text.rb:19

我的 Gemfile 是:

ruby '1.9.3', :engine => 'jruby', :engine_version => '1.7.19'
gem 'pg', '0.17.1', :platform => :jruby, :git => 'git://github.com/headius/jruby-pg.git', :branch => :master

Heroku bundle show returns:

Gems included by the bundle:
 * pg (0.17.1 c236a38)

Heroku ruby -v returns:

jruby 1.7.19 (1.9.3p551) 2015-02-06 fffffff on OpenJDK 64-Bit Server VM 1.8.0_60-cedar14-b24 +jit [linux-amd64]

text.rb 包含:

require 'rubygems'
require 'pg'
puts "cool!"

到目前为止我有:

为了让它工作,你需要在你的 Procfile 命令前加上 bundle exec (因为它是一个非标准的 gem Heroku 不能把它放在自动路径)。

例如:

test: bundle exec ruby text.rb

但是,这会给您的 JRuby 启动时间增加一些开销,因为 Bundler 必须启动两个 JRuby 进程(一个用于自身,然后另一个具有正确的 gem 上下文)。

另一种选择是使用更广泛采用的activerecord-jdbcpostgresql-adapter