NameError(未初始化的常量Paperclip :: Storage :: S3 :: AWS):


91

我正在尝试将图像合并到我的Web应用程序中,并且删除了许多功能后仍然遇到此错误。归结到我的“创建”应用程序控制器,我不确定我应该从哪里去。

2015-02-06T20:30:12.292187+00:00 app[web.1]:    (1.9ms)  ROLLBACK
2015-02-06T20:30:12.296299+00:00 app[web.1]: NameError (uninitialized constant Paperclip::Storage::S3::AWS):
2015-02-06T20:30:12.296301+00:00 app[web.1]:   app/controllers/articles_controller.rb:24:in `create'
2015-02-06T20:45:14.691084+00:00 app[web.1]: [paperclip] saving /articles/images/000/000/013/original/git.jpeg
2015-02-06T20:45:14.698744+00:00 app[web.1]: Completed 500 Internal Server Error in 584ms
2015-02-06T20:45:14.700871+00:00 heroku[router]: at=info method=POST path="/articles" host=preston.herokuapp.com request_id=d9d02257-3616-4686-bce5-3d912cd528c2 fwd="76.22.102.38" dyno=web.1 connect=1ms service=698ms status=500 bytes=1754

Articles_controller.rb

class ArticlesController < ApplicationController
http_basic_authenticate_with name: "name", password: "password", except: [:index, :show]

    def index
        @articles = Article.all.order("created_at DESC")
    end

    def show
        @article = Article.find(params[:id])
    end

    def new
        @article = Article.new
    end 

    def edit
        @article = Article.find(params[:id])

    end

    def create
        @article = Article.new(article_params)

        if @article.save
          redirect_to @article
        else
            render 'new'
        end  
    end

    def update
        @article = Article.find(params[:id])

        if @article.update(article_params)
            redirect_to @article
        else
            render 'edit'
        end
    end

    def destroy
        @article = Article.find(params[:id])
        @article.destroy

        redirect_to articles_path
    end

    private

    def article_params
        params.require(:article).permit(:title, :text, :image)
    end
end

宝石文件

source 'https://rubygems.org'
ruby '2.0.0'

gem 'rails', '4.2.0'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'bootstrap-sass', '~> 3.3.3' 
gem 'autoprefixer-rails'
gem 'paperclip', '~> 4.2.1'
gem 'aws-sdk', '~> 2.0.22'

group :development, :test do
 gem 'byebug'
 gem 'web-console', '~> 2.0'
 gem 'spring'
 gem 'sqlite3'
end

group :production do
    gem 'pg'
    gem 'rails_12factor'
end

group :doc do
    gem 'sdoc', '~> 0.4.0', require: false
end

您要部署到Heroku吗?
艾哈迈德·阿尔·奇特

是的,我已经拥有了,我正在查看heroku日志,发现该错误。
EggSix

3
这是最有可能的,因为你没有初始化的Heroku的AWS常数,你需要运行$ Heroku的配置:集S3_BUCKET_NAME = your_bucket_name $ Heroku的配置:集AWS_ACCESS_KEY_ID = your_access_key_id $ Heroku的配置:集AWS_SECRET_ACCESS_KEY = your_secret_access_key
艾哈迈德·kheat

嗯,我确实遵循了这一步骤,但是我将重新开始以确保它是正确的
EggSix 2015年

好吧,让我知道它是否有效,以便我也可以使其他人也从中受益。
艾哈迈德·阿尔·奇特

Answers:


179

修改Gemfile的aws-sdk,以安装2.0之前的版本:

gem 'aws-sdk', '< 2.0'

新版本的aws-sdk(2.0+)中引入了此问题。您可以在此处了解更多信息:http : //ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2


2
我发现原因是在更新的“ aws-sdk” gem中。有一个新版本(2+)的aws-sdk与以前的版本不向后兼容。您可以在这里
TopaZ 2015年

谢谢,正是我所需要的!
Sprachprofi 2015年

27
另外,您可以将该行替换为gem 'aws-sdk-v1'。然后,您可以使用v2 aws-sdk gem。由于名称空间不同,它们可以在同一应用程序中一起使用。
Trevor Rowe 2015年

Trevor Rowe的解决方案非常适合我-而且可以同时使用它们的事实非常有用。谢谢特雷弗!
XtraSimplicity

18

有一个官方的解决方案,从该分支机构使用回形针:它适用于2以上的aws-sdk版本

gem 'paperclip', :git=> 'https://github.com/thoughtbot/paperclip', :ref => '523bd46c768226893f23889079a7aa9c73b57d68'

只需将:s3_region参数添加到您的回形针s3配置中

为我工作


1
由于不建议使用aws 1,因此这是最好的答案。
ardochhigh

4

通过导航到我的gem文件夹并将Gems更改为:

  • 宝石“回形针”
  • 宝石'aws-sdk'

可以删除版本声明。

为避免出现gem.lock error,请运行bundle update而不是bundle install,否则将仅更新gem。

现在 heroku logs -t命令可用于监视heroku服务器以上传图像。

我最初收到一个新错误, Access Denied Error针对AWS服务器。

为了解决这个问题,我Active Access Key ID在亚马逊网站上找到了具有最新日期的,并使用heroku命令输入了最新日期Access key IDSecret access key

这使我能够在heroku上查看我的图像。

我有这么多的制造Access key IDSecret access keys试图解决这个问题,但是发现宝石是真正的问题。

提示:将所有访问密钥信息保存到OneNote,记事本等中。通过这种方式,您可以返回并检查它们。


我遇到了同样的问题,是否通过删除版本来解决?
斯巴达克斯

3

回形针用于在4.3和以下版本中使用AWS-SDK v1。他们正在尝试包括AWS-SDK v2

官方升级文件https://github.com/thoughtbot/paperclip/blob/master/UPGRADING

##################################################
#  NOTE FOR UPGRADING FROM 4.3.0 OR EARLIER       #
##################################################

Paperclip is now compatible with aws-sdk >= 2.0.0.

If you are using S3 storage, aws-sdk >= 2.0.0 requires you to make a few small
changes:

* You must set the `s3_region`
* If you are explicitly setting permissions anywhere, such as in an initializer,
  note that the format of the permissions changed from using an underscore to
  using a hyphen. For example, `:public_read` needs to be changed to
  `public-read`.

由于某些向后的不可比性(请阅读此https://github.com/thoughtbot/paperclip/issues/2021),此文件已合并但尚未正式发布,但应在Paperclip v中发布5.0.0

因此,就像Vitali Mogilevsky提到的那样,您现在必须使用此功能:

# Gemfile
# ...
gem 'paperclip', :git=> 'https://github.com/thoughtbot/paperclip', :ref => '523bd46c768226893f23889079a7aa9c73b57d68'

发布Paperclip 5.0时,应包括AWS-SDK v2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.