0

プロジェクトの 1 つで Rails 3 エンジンを開発しています。問題をデバッグするために、エッジ ガイドが示唆するように、gem 宣言を:pathステートメントに移動しました。ジェムの必要条件の約 2 ジェム後に表示されます。を使用して開発サーバーを起動しようとすると、次のようなエラーが表示されます。aws-s3rails saws-s3

/Users/me/.rvm/gems/ruby-1.9.3-p194@xproject/gems/aws-s3-0.6.3/lib/aws/s3/extensions.rb:212: in `const_missing_from_s3_library': 初期化されていない定数 MyEngineNamespace ::エンジン (NameError)

S3 gem の関連するコードは次のようになります。

def const_missing_from_s3_library(sym)
  if sym.to_s =~ /^(\w+)(Bucket|S3Object)$/
    const = const_set(sym, Class.new(AWS::S3.const_get($2)))
    const.current_bucket = $1.underscore
    const
  else
    const_missing_not_from_s3_library(sym)
  end
end
alias_method :const_missing_not_from_s3_library, :const_missing
alias_method :const_missing, :const_missing_from_s3_library

しかし、このコードが呼び出された理由はまったくわかりません。エンジンは(意図的に)S3に触れません。それで...え?

4

2 に答える 2

2

あなたの質問に対する100%の答えではありませんが、それはある意味であなたの問題を解決します:

Sidekiq wikiによると、特にスレッドセーフではないaws-s3の代わりにfogを使用することをお勧めします。Fogは、どのクラウドサービスにアクセスし、積極的にサポートするかという点で、はるかに柔軟性があります。これは、FogとS3を使い始めるための良いガイドです。

于 2012-09-26T17:45:16.030 に答える
1

ああ。理解した。問題は(私が疑ったように)S3ではなく、私がGemfile質問に含めなかったエンジンをに含めた方法でした(したがって、誰もそれを理解しなかったのも不思議ではありません)。

これは機能します:

gem "my_engine", :path => "/Users/me/Projects/my-engine", :require => 'my-engine'

これはしません:

gem "my_engine", :path => "/Users/me/Projects/my-engine"

この:requireパラメータは、定数の設定に役立つようです。

于 2012-09-26T18:13:01.570 に答える