0

我正在为我们的一个项目开发 Rails 3 引擎。为了调试问题,我将 gem 声明移到了一条:path语句中,正如边缘指南所建议的那样。在宝石的要求之后出现两颗宝石aws-s3。现在,当我尝试使用 启动开发服务器时rails s,出现如下错误aws-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 ::引擎(名称错误)

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% 回答您的问题,但它会在某种程度上解决您的问题:

建议使用雾而不是 aws-s3,根据Sidekiq wiki,这不是线程安全的。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 回答