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
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
このブランチのPaperclipを使用する公式のソリューションがあります。2以上のaws-sdkバージョンで動作します
gem 'Paperclip', :git=> 'https://github.com/thoughtbot/Paperclip', :ref => '523bd46c768226893f23889079a7aa9c73b57d68'
paperslip s3構成に:s3_regionパラメーターを追加するだけです
私のために働く
Gemフォルダーに移動し、Gemsを次のように変更することで機能するようになりました。
バージョン宣言は削除できます。
gem.lock error
を取得しないようにするには、bundle update
の代わりにbundle install
を実行します。そうしないと、gemのみが更新されます。
これで、heroku logs -t
コマンドを使用して、herokuサーバーを監視して画像のアップロードを行うことができます。
元々、AWSサーバーのAccess Denied Error
という新しいエラーを受け取りました。
これを修正するために、Amazon WebサイトでActive Access Key ID
を見つけ、最新のAccess key ID
とSecret access key
を入力するためにherokuコマンドを使用しました。
これにより、herokuで自分の画像を表示できました。
私は非常に多くのAccess key ID
とSecret access keys
を作成して問題を修正しようとしましたが、宝石が本当の問題であることがわかりました。
ヒント:すべてのアクセスキー情報をOneNote、メモ帳などに保存します。この方法で、戻って確認できます。
Paperclipを使用して、バージョン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を含める必要があります