Paperclipを使用して画像をアップロードする簡単なプロジェクトに取り組んでいます。 S3をPaperclipと統合しようとするまで、すべてがうまく機能しています。ユーザーの画像を「アップロード」すると、NoMethodError (undefined method 'match' for nil:NilClass):
エラーが発生します。これは、S3構成を実行している場合にのみ発生します。コメントアウトすると、ファイルのアップロードが完全に完了します。
私の構成:
development.rb:
....
....
config.Paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => ENV['AWS_BUCKET_ID'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
私のモデル:
class User < ActiveRecord::Base
has_attached_file :image_file, default_url: "/myapp/images/:style/missing.png"
validates_attachment_file_name :image_file, matches: [/png\Z/, /jpeg\Z/, /tiff\Z/, /bmp\Z/, /jpg\Z/]
コンソールからのエラー出力全体:
NoMethodError (undefined method `match' for nil:NilClass):
app/controllers/images_controller.rb:33:in `block in create'
app/controllers/images_controller.rb:32:in `create'
私が試したもの:
AWSキーとバケット名を環境変数としてではなく、コードに直接追加しました。
上記のように、環境ファイルのAWS構成をコメント化したところ、完全に機能しているようでした。
Google Cloud Storageの構成を開始するためにfog
gemを先にインストールしたことを言及する価値はありますが、代わりにS3を使用することにしました。 gem uninstall fog
はgemを削除しますが、一部の依存関係が残っているようです。
追加 :s3_region
を設定マップに:
例えば。
config.Paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => ENV['AWS_BUCKET_ID'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
},
:s3_region => ENV['AWS_REGION']
}
残念ながら、これはv5.0.0の機能です(ベータ版)。したがって、ドキュメントにはそれについて何もありません。しかし 実際の5.0コードにそれについてのコメント があります。
s3_permissions
papertrailのキーは文字列値を期待します(これは記号を受け入れるために使用されていました)。
:s3_permissions => 'public-read'
s3_credentials
などの方法で、region: ENV["AWS_REGION"]
でリージョンを指定する必要があります。未使用の宝石のクリーンアップについては、bundle clean
を実行できます。