NameError (초기화되지 않은 상수 Paperclip :: Storage :: S3 :: AWS) :


91

웹 앱에 이미지를 통합하려고하는데 몇 가지 기능을 제거한 후에도이 오류가 계속 발생합니다. 그것은 내 '생성'응용 프로그램 컨트롤러로 내려 왔고 여기에서 어디로 가야할지 완전히 모르겠습니다.

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

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

Heroku에 배포하고 있습니까?
Ahmad Al-kheat

예, 이미 가지고 있으며 heroku 로그를 찾고 있는데 그 오류를 발견했습니다.
EggSix

3
세트 AWS_SECRET_ACCESS_KEY = your_secret_access_key : 세트 S3_BUCKET_NAME = your_bucket_name $ Heroku가 설정 : 설정 AWS_ACCESS_KEY_ID = your_access_key_id $ Heroku가 설정 당신에게 Heroku에서 AWS 상수를 초기화하지 않았기 때문에 그것이 가장 가능성이, 당신은 $ Heroku가 설정 실행해야
아마드 알 - kheat

흠 내가 한 그 단계를 따라하지만 난 그냥 바로 확인 곳곳을 시작합니다
EggSix

다른 사람들에게도 도움이 될 수 있도록 작동하는지 알려주세요.
Ahmad Al-kheat 2015

답변:


179

2.0 이전 버전을 설치하도록 Gemfile의 aws-sdk를 수정합니다.

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에 있습니다. 이전 버전과 역 호환되지 않는 aws-sdk의 새 버전 (2+)이 있습니다. 여기
TopaZ

고마워요, 정확히 제가 필요한 것입니다!
Sprachprofi

27
또한 해당 줄을 gem 'aws-sdk-v1'. 그러면 v2 aws-sdk gem을 가져올 수 있습니다. 네임 스페이스가 다르기 때문에 동일한 애플리케이션에서 함께 사용할 수 있습니다.
Trevor Rowe 2015

Trevor Rowe의 솔루션은 저에게 완벽하게 작동했으며 동시에 사용할 수 있다는 사실은 매우 유용합니다. 고마워 Trevor!
XtraSimplicity

18

공식 솔루션이 있습니다 .Use paperclip from this branch : it works with aws-sdk versions above 2

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

종이 클립 s3 구성에 : s3_region 매개 변수를 추가하십시오.

나를 위해 일해


1
aws 1이 더 이상 사용되지 않기 때문에 이것이 가장 좋은 대답입니다.
ardochhigh

4

내 gem 폴더로 이동하여 Gems를 다음과 같이 변경하여 작동하도록했습니다.

  • 보석 '종이 클립'
  • gem 'aws-sdk'

버전 선언을 삭제할 수 있습니다.

를 피하려면 대신을 gem.lock error실행하십시오 . 그렇지 않으면 gem 만 업데이트됩니다.bundle updatebundle install

이제 heroku logs -t명령을 사용하여 이미지 업로드에 대한 heroku 서버를 모니터링 할 수 있습니다.

Access Denied ErrorAWS 서버에 대해 처음에 새로운 오류가 발생했습니다 .

이 문제를 해결하기 위해 Active Access Key IDAmazon 웹 사이트에서 최신 날짜를 찾은 다음 heroku 명령을 사용하여 최신 Access key IDSecret access key.

이를 통해 heroku에서 내 이미지를 볼 수있었습니다.

나는 너무 많이 Access key ID만들고 Secret access keys문제를 해결하려고 노력했지만 보석이 진짜 문제라는 것을 알았습니다.

팁 : 모든 액세스 키 정보를 OneNote, 메모장 등에 저장합니다. 이렇게하면 돌아와서 확인할 수 있습니다.


동일한 문제가 발생합니다. 버전을 제거하여 해결 했습니까?
Gary Wallen 2015 년

3

버전 4.3 이하에서 AWS-SDK v1을 사용하는 데 사용되는 Paperclip. 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

그래서 같은 비탈리 Mogilevsky이 언급 한, 당신은 지금이를 사용해야합니다 :

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

Paperclip 5.0이 출시되면 AWS-SDK v2가 포함되어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.