2016-11-03 16 views
1

私はのHeokuに今すぐ展開されるRails 5アプリケーションで作業しています。私は画像アップロードを管理するPostgrsqlペーパークリップ、アップロードされたすべての画像を保存するAWS S3を使用しています。このサーバの証明書はS3とPaperclipで無効です

これを達成するために、私はこの非常に詳細で便利なtutorial from Heroku devを使用して、本当に私を助けました。

私はdevelopment envと同じ設定を使用してテストできます。実際にはdevの魅力のように動作します。

私がHerokuにデプロイし、移行を実行した後、ENV変数を設定すると、カバーイメージを受け入れる新しいBrochureが作成されます。すべてがうまくいく。画像はAWS S3に正しく保存されます。

しかし、ビューでイメージをレンダリングすると、うまく動作しません。

Safariブラウザ:

Failed to load resource: The certificate for this server is invalid. You might be connecting to a server that is pretending to be “sponsors.matchxperience.s3.amazonaws.com” which could put your confidential information at risk. 

enter image description here

CHROMのカナリア:

Failed to load resource: net::ERR_INSECURE_RESPONSE 

enter image description here

私は、ブラウザのコンソールで次のエラーを得ました

私は何が問題なのか分かりません。なぜなら、開発環境ではすべてが機能するからです。

何が起こっているのか誰かがこれを助けてくれますか?

production.rb(development.rbにおいて同じ)

Rails.application.configure do 
    # We’ll also need to specify the AWS configuration variables for the production Environment. 
    config.paperclip_defaults = { 
    storage: :s3, 
    # s3_protocol: 'http', 
    s3_credentials: { 
     bucket: ENV.fetch('AWS_S3_BUCKET'), 
     access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'), 
     secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'), 
     s3_region: ENV.fetch('AWS_REGION') 
    } 
    } 
end 

brochure.rb

class Brochure < ApplicationRecord 
    # This method associates the attribute ":cover" with a file attachment 
    has_attached_file :cover, styles: { 
    card: '500x330#', 
    } 

    # Validate the attached image is image/jpg, image/png, etc 
    validates_attachment_content_type :cover, :content_type => /\Aimage\/.*\Z/ 
end 

paperclip.rb設定/初期化子で/

Paperclip::Attachment.default_options[:url] = ':s3_domain_url' 
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename' 
+0

あなたの開発用URLはhttpsですか? – Zero

+0

いいえ、私は 'http:// localhost:3000'で作業しています! –

+0

あなたのモデルにあなたのペーパークリップ設定を追加してください。 – Zero

答えて

1

このエラーのさまざまなソースを検索して読んだ後、私は同様のエラーに対してさまざまな解決策を見つけましたが、RubyやRailsで何かを見ることはできません。

私はそれをを固定し、それはAWS S3サーバとのものだったと私は正しかったと確信しました。最後に、creating a new bucketの公式文書を読んで、私はそれが何となく簡単なことだと気付きました。ドキュメントで

それは私たちがバケツの名前にピリオド.とハイフン-を使用することができます言う:

小文字、数字、ピリオド、ハイフンができます( - )(。)。

数字または文字で始まる必要があります。

3〜63文字の長さでなければなりません。

...

だから、私は私のバケットの名前:それは、ブラウザのリクエストを混乱させる可能性、サーバーののURLの話、

右に書かれた
sponsors.matchxperience 

しかしを別のサーバーを指していると私の場合に起こっていた。だからこそ私はそのエラーを受けました。

が同じようにという名前の別のバケット(またはを機能することができる実際のものの名前を変更)し、コピーされたすべてのコンテンツ作成ソリューション:

sponsors-matchxperience 

をそして魔法それだけで生産して正常に動作しますヘロクで。私はAWSのドキュメントで何が起こっているのか分かりませんが、私にとっては、バケットの名前にピリオド.というエラーがあります。

私はそれが他の人にとって役に立つことを願っています。

+0

* "SSLでバーチャルホストスタイルのバケットを使用する場合、SSLワイルドカード証明書はピリオドを含まないバケットと一致します。これを回避するには、HTTPを使用するか、独自の証明書検証ロジックを記述します。バケット名のピリオド( "。")* " - http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html –

+0

あなたの解決策は正しいですが、あなたの診断はちょっとです。 S3は正常に動作していましたが、ブラウザー(正常に動作しています)は*標準*のセキュリティー証明書が無効であると信じていました - 実際は技術的にはそうでしたが - S3が混乱したり、 '* .example.com'のSSL/TLS証明書は' *。*。example.com'ではなく '* .example.com'に対してのみ有効です。' * 'は証明書の妥当性を確認するためのドットと一致しないからです。この制限は、SSLワイルドカード証明書の動作にあります(S3ではなく)。 –

+0

@ Michael-sqlbot説明をいただきありがとうございます。私はバケットの作成についてその部分を見ていませんでしたが、それは意味があります。ソリューションを補完していただきありがとうございます。 –

関連する問題