2017-02-12 7 views
0

サービスワーカーの宝石をテストしています.VAPIDのプライベートと公開キーを使用してプッシュ通知を送信しています。 。ローカルにプッシュ通知を作成しますが、私はHerokuのにデプロイする際に、アプリはプッシュ通知ページに移動しようとすると上記エラーを発生させます。ここはエラーになります。ここで、つまらないキーActionView :: Template :: Error(未定義メソッド `tr 'for nil:NilClass

 75] Started GET "/push-simple/" for 69.253.120.203 at 2017-02-12 06:37:35 +0000 
2017-02-12T06:37:35.339318+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75] ActionView::Template::Error (undefined method `tr' for nil:NilClass 
2017-02-12T06:37:35.333379+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75] Rendering pages/push-simple.html.erb within layouts/application 
2017-02-12T06:37:35.332337+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75] Processing by PagesController#show as HTML 
2017-02-12T06:37:35.336377+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75] Rendered pages/push-simple.html.erb within layouts/application (2.8ms) 
2017-02-12T06:37:35.336998+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75] Completed 500 Internal Server Error in 4ms 
2017-02-12T06:37:35.339281+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75] 
2017-02-12T06:37:35.339490+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75]  13: <script type="text/javascript"> 
2017-02-12T06:37:35.339320+00:00 app[web.1]: Did you mean? try): 
2017-02-12T06:37:35.339489+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75]  11: </div> 
2017-02-12T06:37:35.339489+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75]  12: 
2017-02-12T06:37:35.339561+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75] app/views/pages/push-simple.html.erb:14:in `_app_views_pages_push_simple_html_erb__2838769268823495646_39526220' 
2017-02-12T06:37:35.339491+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75]  15: </script> 
2017-02-12T06:37:35.339491+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75]  14: var publicKey = new Uint8Array(<%= WebpushClient.public_key_bytes %>); 
2017-02-12T06:37:35.339492+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75]  16: <%= javascript_include_tag 'push-simple' %> 
2017-02-12T06:37:35.339520+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75] 
2017-02-12T06:37:35.339560+00:00 app[web.1]: [3d626b62-4c1b-41ca-aad3-fc653dc96b75] app/clients/webpush_client.rb:7:in `public_key_bytes' 

そして、ここでは私のwebpushclientです次のように定義されています:

class WebpushClient 
    def self.public_key 
     ENV['VAPID_PUBLIC_KEY'] 
    end 

    def self.public_key_bytes 
     Base64.urlsafe_decode64(public_key).bytes 
    end 

    def self.private_key 
     ENV['VAPID_PRIVATE_KEY'] 
    end 

    # Send webpush message using subscription parameters 
    # 
    # @param message [String] text to encrypt 
    # @param subscription_params [Hash<Symbol, String>] 
    # @option subscription_params [String] :endpoint url to send encrypted message 
    # @option subscription_params [Hash<Symbol, String>] :keys auth keys to send with message for decryption 
    # @return true/false 
    def send_notification(message, endpoint: "", p256dh: "", auth: "") 
     raise ArgumentError, ":endpoint param is required" if endpoint.blank? 
     raise ArgumentError, "subscription :keys are missing" if p256dh.blank? || auth.blank? 

     Rails.logger.info("Sending WebPush notification...............") 
     Rails.logger.info("message: #{message}") 
     Rails.logger.info("endpoint: #{endpoint}") 
     Rails.logger.info("p256dh: #{p256dh}") 
     Rails.logger.info("auth: #{auth}") 

     Webpush.payload_send \ 
     message: message, 
     endpoint: endpoint, 
     p256dh: p256dh, 
     auth: auth, 
     vapid: { 
      subject: "[email protected]", 
      public_key: public_key, 
      private_key: private_key 
     } 
    end 

    def public_key 
     self.class.public_key 
    end 

    def private_key 
     self.class.private_key 
    end 
    end 

ここでは、 l公開鍵:

私が前に言ったように、それはローカルで動作します。私は変数を定義することを忘れてしまったかもしれないと思います。私は同様の投稿を見てきて、しばらくデバッグしていましたが、運がなかったのです。助言がありますか?私はまた追加したい、私は全く新しいので、それは明らかなエラーなら、私は完全に理解します。

答えて

2

あなたのエラーは、このメソッドから来ている:public_key:あなたから来なければなりませんundefined method 'tr' for nil:NilClass場所です

def urlsafe_decode64(str) 
    strict_decode64(str.tr("-_", "+/")) 
end 

def self.public_key_bytes 
    Base64.urlsafe_decode64(public_key).bytes 
end 

source code for Base64#urlsafe_decode64を見ると、これは以下のように定義されます。

def self.public_key 
    ENV['VAPID_PUBLIC_KEY'] 
end 

...つまり、プロダクションサーバーで環境変数を設定していません。そのため、ローカルでは動作しますが、プロダクションでは動作しません。

+0

あなたは爪に当たっています。ありがとうトムトム! –

+0

ところで、このエラーメッセージをより明確にすることで、コードを改善することができます(同じミスを繰り返した場合、より有用なエラーメッセージが表示されます)。 'public_key'メソッドを定義します次のようなものです: 'ENV ['VAPID_PUBLIC_KEY'] || raise "Vapid APIキーが設定されていません" –

関連する問題