未初始化常量 AWS::S3::Base。

3

我有一份代码在 lib 文件夹中。这段代码在 rails 外部可以正常运行,但是当从 rails 控制器中调用时,我遇到了未初始化的常量 AWS::S3::Base 错误。

require 'rubygems'
require 'aws/s3'

module S3Util

  def self.upload_file(local_file)
    mime_type = "application/octet-stream"
    bucket = "test"

    AWS::S3::Base.establish_connection!(
      :access_key_id     => '*****',
      :secret_access_key => '****'
    )

    base_name = File.basename(local_file)

    puts "**** Uploading #{local_file} as '#{base_name}' to '#{bucket}'"

    AWS::S3::S3Object.store(
      base_name,
      File.open(local_file),
      bucket,
      :content_type => mime_type
    )

    puts "***** Uploaded!"

  end
end

你是否已经将Gem添加到了你的Gemfile中?请在Gemfile中发布该行代码。 - Jasdeep Singh
1
宝石 'aws-s3',:require => 'aws/s3' 宝石 'aws-sdk' - ed1t
在控制器中你怎么称呼它? - iltempo
2
尝试在您的S3Util模块中使用require 'aws/s3'。这个aws-s3 gem总是存在命名空间问题。并且像@menacingly建议的那样调用它 ::AWS::S3::Base - suhovius
附注:aws-s3 gem 已经有些被弃用了,现在已经由 fog gem 取代了吗? - Thomas Klemm
显示剩余3条评论
2个回答

1

只需在您的控制器中进行

require 'aws/s3'

它对我很有效


0
Rails并不知道该模块对应用程序是可用的,您需要将其添加到它查找的路径中。您可以通过几种方式来实现,但大多数人都采用以下方法。
请将此行添加到您的config/application.rb文件中:
config.autoload_paths += Dir["#{config.root}/lib/**/"]

你可能在某个时候想要更具体地指定搜索哪些目录,但这应该能让你开始了。


我按照你要求做了相同的事情,但是仍然遇到了同样的错误:未初始化常量 AWS::S3::Base - Taimoor Changaiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接