9

以下の Rails コントローラーを使用して Ruby スクリプト (postgres db に接続) を呼び出そうとしていますが、PG gem ファイルの 1 つをロードする際に問題が発生しているようです。require ステートメントを require 'pg' に設定し、絶対パスも試しました (require /usr/local/rvm/gems/ruby-1.9.3-p194@railsTest/gems/pg-0.14.0/lib/pg/)。ファイル「pg_ext」は実際にはディレクトリに存在します。さらに、問題なく Ruby スクリプト (dbrubyscript.rb) をスタンドアロンで実行できますが、この方程式にレールを追加するとcannot load such file -- pg_extエラーが発生します。

この問題を修正するものをオンラインで見つけることができなかったため、ここでの方向性は非常に高く評価されます

レールコントローラー:

class TestdlController < ApplicationController
def runmyscript
  load "/usr/local/rvm/my_app/ruby_scripts/reports/dbrubyscript.rb"
  send_file '/usr/local/rvm/tmp/failedtests.csv', :type => 'text/csv', :disposition => 'inline'
  flash[:notice] = "Reports are being processed..."
end
end

.rb ファイル (dbrubyscript.rb) には次のものがあります。

require 'rubygems'
require 'pg'

connects to (production) database
@conn = PGconn.connect("zzzzz.test.prod", 5432,"","","yyyyy_prod" ,"postgres", "xxxxxx")
.....

トレース エラー: TestdlController#runmyscript の LoadError

そのようなファイルを読み込めません -- pg_ext

Rails.root: /usr/local/rvm/my_app アプリケーション トレース | フレームワーク トレース | フル トレース app/controllers/Testdl_controller.rb:3:in `runmyscript'

このエラーは、ファイル
/usr/local/rvm/my_app/ruby_scripts/reports/dbrubyscript.rb
/usr/local/rvm/gems/ruby-1.9.3-p194@railsTest/gems/pg-0.14 の読み込み中に発生しました。 0/lib/pg/
pg_ext

4

3 に答える 3

0

ruby /usr/local/rvm/gems/ruby-1.9.3-p194@railsTest/gems/pg-0.14.0/lib/pg/ext/extconf.rb を実行して、発生するエラーを確認してください。これにより、私の場合、PostgreSQL クライアントが古すぎると判断できました。現在のバージョンがインストールされているように見えるため、エラーは異なる場合があります。

于 2013-06-15T11:51:06.927 に答える
-1

Gemfileに行を追加してみてください。

gem "pg"

次に、コマンドラインからbundlerを実行します。

bundle install

RailsはBundlerを使用してgemと依存関係を管理します。Bundlerの背後にある考え方については、http: //gembundler.com/v1.2/rationale.htmlでもう少し読むことができます。

于 2012-12-11T06:05:24.793 に答える