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

Egg*_*Six 90 ruby ruby-on-rails paperclip amazon-web-services

我正在尝试将图像合并到我的网络应用程序中,并在删除了一些功能后继续遇到此错误.它归结为我的"创建"应用程序控制器,我不完全确定我应该从哪里开始.

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

的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
Run Code Online (Sandbox Code Playgroud)

Top*_*paZ 178

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

gem 'aws-sdk', '< 2.0'
Run Code Online (Sandbox Code Playgroud)

这个问题是在新版本的aws-sdk(2.0+)中引入的.你可以在这里阅读更多:http://ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2

  • 此外,您可以用`gem'aws-sdk-v1'`替换该行.然后,这允许您拉入v2 aws-sdk gem.由于命名空间不同,它们可以在同一个应用程序中一起使用. (27认同)
  • 我发现原因在于更新的'aws-sdk'宝石.有一个新版本(2+)的aws-sdk与以前的版本不向后兼容.您可以阅读更多[here:](https://github.com/aws/aws-sdk-ruby#nameerror-uninitialized-constant-aws) (2认同)

Vit*_*sky 18

有官方解决方案使用此分支中的paperclip:它适用于2以上的aws-sdk版本

gem 'paperclip', :git=> 'https://github.com/thoughtbot/paperclip', :ref => '523bd46c768226893f23889079a7aa9c73b57d68'
Run Code Online (Sandbox Code Playgroud)

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

适合我