2016-05-10 6 views
13

私は、画像をアップロードするためにPaperclipを使用する単純なプロジェクトに取り組んでいます。 S3をPaperclipと統合しようとするまで、すべてのことがうまくいきました。ユーザーの画像を「アップロード」すると、NoMethodError (undefined method 'match' for nil:NilClass):というエラーが発生します。これは、S3の設定を実行している場合にのみ発生します。AWS S3の統合により、未定義のメソッドmatchが返される

マイ設定:

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のクラウドストレージのための設定を開始するfog宝石以前インストールし、代わりにS3に固執することを決めたことを言及する価値があるだろう。私はgem uninstall fogを使って宝石を取り除いたが、いくつかの依存関係が残っているようだ。

+0

私は同じ問題があります。まだ修正を見つけましたか? – rguerrettaz

+1

追加してみましたか:s3_region => 'us-east-1'(またはあなたのs3がある地域)以下は役に立つリンクです:https://github.com/thoughtbot/paperclip/blob/95acf3b898bd782f4429d42fd2d8812505390328/lib /paperclip/storage/s3.rb#L96 – rguerrettaz

+1

はい、AWSリージョンを追加すると、うまく動作しているようです。以下の答えで言えば、これはドキュメント内では完全には説明されていません。私は基本的に完璧に動作した別のプロジェクトから貼り付けられたコードをコピーするので、もっと混乱しました。 – PSCampbell

答えて

26

コンフィグマップに: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の機能(ベータ版)です。したがって、ドキュメントには何もありません。しかし、a comment about it in the actual 5.0 codeがあります。

また、papertrailのs3_permissionsキーには文字列の値が期待されています(記号を受け入れるために使用されます)。

:s3_permissions => 'public-read' 
+0

v5が正式にリリースされたので、これは[UPGRADING](https://github.com/thoughtbot/paperclip/blob/4ef27eb84fe283f5dbe62fd99d7359822e79db28/UPGRADING#L10)のドキュメントに記載されています。 – Nick

+1

infoの場合、 ':region'の値はファイルパスにあります。例: 'EU(フランクフルト)'は 'eu-central-1'です –

+0

AWS地域とエンドポイント http://docs.aws.amazon.com/general/latest/gr/rande.html – askrynnikov

3

region: ENV["AWS_REGION"]のように、s3_credentialsの領域を指定する必要があります。 未使用の掃除はbundle cleanで実行できます。

+0

地域を追加して同じエラーが発生しています。 – rguerrettaz

+0

':s3_region'を' development.rb'に追加した後、アプリケーションを再起動しましたか? – simmer

関連する問題