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

我正在尝试将图像合并到我的networking应用程序中,并在删除了很多function后继续运行此错误。 它归结于我的“创build”应用程序控制器,我不完全确定我应该从哪里去。

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 /articleshttp://img.dovov.com000/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 

的Gemfile

 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 

修改你的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

有官方的解决scheme从这个分支使用回形针:它适用于2以上的aws-sdk版本

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

只需添加:s3_region参数到您的回形针s3configuration

为我工作

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

  • gem'纸夹'
  • gem'aws-sdk'

版本声明可以被删除。

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

现在,可以使用heroku logs -t命令来监控heroku服务器以进行图像上传。

我原来收到一个新的错误,AWS服务器Access Denied Error

为了解决这个问题,我在亚马逊网站上find了最新date的Active Access Key ID ,并使用heroku命令input最新的Access key IDSecret access key

这使我能够在heroku上查看自己的形象。

我做了这么多Access key IDSecret access keys试图解决这个问题,但发现gem是真正的问题。

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

回形针使用版本4.3和波纹pipe使用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