3

ここのレールn00b-いくつかの支援が必要です。Rails3アプリをLinuxからWindowsに移植しようとしています。私のGemfileは次のようになります。

source 'http://rubygems.org'
gem 'rails', '3.0.0'
gem 'sqlite3-ruby', '1.2.5', :require => 'sqlite3'
gem 'ruby-oci8', '1.0.6'

このWindowsマシンにはOracleクライアントがないため、ruby-oci8gemをネイティブにコンパイルすることはできません。

Gemfileの「ruby-oci8」行をコメントアウトし、ここから手動でgemをインストールしました:http://rubygems.org/downloads/ruby-oci8-1.0.6-x86-mswin32-60.gem。また、必要なDLLをにコピーしましたruby\bin

私はそれが機能することを確認しました:

ruby -rubygems -e "require 'oci8'; OCI8.new('user','password','pasdev:2700/gen11dvu').exec('select * from ARCS_USER_LO
GON') do |r| puts r.join(','); end"

これは私のデータベースから多くのデータを返すので、私はそれが機能することを知っています。

ただし、require 'oci8'Railsコンソール(または実行中のアプリ)から実行しようとすると、次のようになります。

LoadError: no such file to load -- oci8

これはb/c RailsがGemfileで指定されたgemのみをロードすることで発生すると思いますが、指定方法がわかりません。必要なgemをすでにインストールしています:

C:\javadev\ashbtw3>gem list

*** LOCAL GEMS ***

activerecord (3.0.0)
bundler (1.0.21, 1.0.0)
rails (3.0.0)
rake (0.8.7)
ruby-oci8 (1.0.6 x86-mswin32-60)
...etc...

しかし、Gemfileでこの行のコメントを外すと、次のようになります。

gem 'ruby-oci8', '1.0.6'

bundlerは別の1.0.6をダウンロードしてコンパイルしようとしますが、もちろん失敗します。また、これらのバリエーションをすべて試しましたが、失敗しました。

gem 'ruby-oci8', '1.0.6', :platforms => :mingw
gem 'ruby-oci8', '1.0.6-x86-mswin32-60', :platforms => :mingw32
gem 'ruby-oci8-1.0.6-x86-mswin32-60'
gem 'ruby-oci8', '1.0.6-x86-mswin32-60'

なぜbundlerは私がすでに持っているgemをインストールしようとしているのですか?バージョンとプラットフォームを適切に指定して、このgemがすでにインストールされていることをBundlerに認識させ、Gemfile.lockに含めるにはどうすればよいですか?Oracleクライアントをインストールせずに使用できる他の解決策はありますか?

編集1

カイルの提案に従って、私は次のことを試みました:

gem 'ruby-oci8', :path => 'C:/Ruby187/lib/ruby/gems/1.8/gems/ruby-oci8-1.0.6-x86-mswin32-60

これにより、Bundlerが正常に実行されました。

Using ruby-oci8 (1.0.6) from source at C:/Ruby187/lib/ruby/gems/1.8/gems/ruby-oci8-1.0.6-x86-mswin32-60

ただし、Railsコンソールから「oci8」を要求しようとすると、次のようになります。

C:\javadev\ashbtw3>ruby script\rails console
Loading development environment (Rails 3.0.0)
irb(main):001:0> require 'oci8'
LoadError: no such file to load -- oci8lib
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `load_dependency'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:591:in `new_constants_in'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `load_dependency'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/ruby-oci8-1.0.6-x86-mswin32-60/lib/oci8.rb:20
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'

欠落しているファイルはext/oci8、インストールされているgemディレクトリの下にありますが、表示されません。

私にできる追加のことはありますか?

4

1 に答える 1

2

を指定してみました:pathか?

gem 'ruby-oci8', :path => '/path/to/ruby-oci8-1.0.6-x86-mswin32-60'
于 2013-01-10T01:40:46.393 に答える