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

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、2015

はい、すでに持っています。herokuのログを調べたところ、そのエラーが見つかりました。
EggSix、2015

3
ほとんどの場合、HerokuでAWS定数を初期化していないため、$ heroku config:set S3_BUCKET_NAME = your_bucket_name $ heroku config:set AWS_ACCESS_KEY_ID = your_access_key_id $ heroku config:set AWS_SECRET_ACCESS_KEY = your_secret_access_key
Ahmad Al-kheat

ええと、その手順を実行しましたが、それが正しいことを確認するために
最初からやり直し

それが機能するかどうかを知らせて、他の人たちにも利益をもたらすための答えにすることができます。
Ahmad Al-kheat、2015

回答:


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にあることがわかりました。以前のバージョンとの下位互換性がないaws-sdkの新しいバージョン(2+)があります。あなたはここで
TopaZ

ありがとう、私が本当に必要なもの!
Sprachprofi 2015

27
また、その行をで置き換えることができますgem 'aws-sdk-v1'。これにより、v2 aws-sdk gemを取り込むことができます。名前空間が異なるため、同じアプリケーションで一緒に使用できます。
Trevor Rowe、

Trevor Roweのソリューションは私にとって完璧に機能しました。同時に使用できるという事実は非常に便利です。Trevorに感謝します。
XtraSimplicity 2016年

18

公式の解決策がありますこのブランチのペーパークリップを使用してください:2以上のaws-sdkバージョンで動作します

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

:s3_regionパラメータをペーパークリップs3構成に追加するだけです

私のために働く


1
aws 1が廃止されたため、これが現在の最良の回答です。
ardochhigh 2016

4

私は私のgemフォルダーに移動し、Gemsを次のように変更することで機能しました:

  • 宝石「ペーパークリップ」
  • 宝石「aws-sdk」

バージョン宣言は削除できます。

を避けるために gem.lock errorbundle update代わりにbundle install、の。そうしないと、gemのみが更新されます。

今、 heroku logs -tコマンドを使用してherokuサーバーを監視し、画像のアップロードを行うことができます。

最初は新しいエラーを受け取りましたが、 Access Denied ErrorAWSサーバーの。

これを修正するためActive Access Key IDに、Amazonのウェブサイトで最新の日付を見つけ、herokuコマンドを使用して最新の日付を入力しましたAccess key IDSecret access key

これにより、herokuで自分の画像を表示できました。

たくさん作ったAccess key IDSecret access keys問題を解決しようとするが、宝石は本当の問題であることが判明しました。

ヒント:すべてのアクセスキー情報をOneNote、メモ帳などに保存します。これにより、戻ってそれらを確認できます。


同じ問題が発生していますが、バージョンを削除することで解決しましたか?
Spartacus38

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を含める必要があります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.