aws-s3 gem我的引擎有命名空间问题

时间:2012-09-26 17:33:25

标签: ruby ruby-on-rails-3 namespaces rails-engines

我正在为我们的一个项目开发Rails 3引擎。为了调试问题,我将gem声明移动到:path语句,为the edge guide suggests。在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 :: Engine(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。所以...嗯?

2 个答案:

答案 0 :(得分:2)

不是100%回答您的问题,但它会以某种方式解决您的问题:

根据fog,建议使用the Sidekiq wiki代替aws-s3,这不是线程安全的。 在云服务访问和主动支持方面,雾的灵活性要高得多。这是getting started with Fog and S3的好指南。

答案 1 :(得分: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参数似乎在设置常量时很有用。