お世話になっております。
前提
ruby 2.6.5
Rails 5.2.4
Docker
docker-compose
GitHubのURLを記載しておきます。
https://github.com/nanakobaby/myapp
現状
ローカル上では動作していたjsが、本番環境(AWS)では動作しません。
本番環境で出現しているエラーは以下になります。
ReferenceError: Cannot access 'App' before initialization
エラーが出現している行
myapp/public/assets/application-61cf….
App.cable=ActionCable.createConsumer()}.call(this),App.loadPlugins=((e,t,n)=>{async function r(){if(t)fo......
[試したこと]
・上記のエラーが出現する原因として、以下の記事を参考に調査しました。
初期化前に語彙変数にアクセスしました。これはブロックステートメント内で、定義される前にlet か const 宣言にアクセスすると発生します。
このことから、エラー該当ファイル内でApp.cableが再宣言されている箇所を探したのですが、見当たりませんでした。
・本番環境でJSが動作しない要因がないか確認
- application.jsにライブラリの読み込みで関連しているものは2つないか => なし
- JavaScriptの読み込み順を変える
application.html.erb
before
<head> <title>Myapp</title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= stylesheet_link_tag "/assets/font/inter/inter.min.css", media: "all", id: "font-css" %> <%= stylesheet_link_tag "/assets/css/style.min.css", media: "all", id: "main-css" %> <%= stylesheet_link_tag "/assets/css/sidebar-gray.min.css", media: "all", id: "theme-css" %> <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> <script src="https://js.pay.jp/" type="text/javascript"></script> </head>
after
<head> <title>Myapp</title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> <script src="https://js.pay.jp/" type="text/javascript"></script> <%= stylesheet_link_tag "/assets/font/inter/inter.min.css", media: "all", id: "font-css" %> <%= stylesheet_link_tag "/assets/css/style.min.css", media: "all", id: "main-css" %> <%= stylesheet_link_tag "/assets/css/sidebar-gray.min.css", media: "all", id: "theme-css" %> </head>
関連するコード
application.js
//= require jquery3 //= require popper //= require bootstrap-sprockets //= require activestorage //= require turbolinks //= require rails-ujs //= require_tree .
cable.js
// Action Cable provides the framework to deal with WebSockets in Rails. // You can generate new channels where WebSocket features live using the `rails generate channel` command. // //= require action_cable //= require_self //= require_tree ./channels (function() { this.App || (this.App = {}); App.cable = ActionCable.createConsumer(); }).call(this);
pay.js
document.addEventListener( "DOMContentLoaded", e => { if (document.getElementById("token_submit") != null) { Payjp.setPublicKey("pk_test_a33b7ef2b25aa51a5df58de1"); let btn = document.getElementById("token_submit"); btn.addEventListener("click", e => { e.preventDefault(); let card = { number: document.getElementById("card_number").value, cvc: document.getElementById("cvc").value, exp_month: document.getElementById("exp_month").value, exp_year: document.getElementById("exp_year").value }; Payjp.createToken(card, (status, response) => { if (status === 200) { $("#card_number").removeAttr("name"); $("#cvc").removeAttr("name"); $("#exp_month").removeAttr("name"); $("#exp_year").removeAttr("name"); $("#card_token").append( $('<input type="hidden" name="payjp-token">').val(response.id) ); document.inputForm.submit(); alert("登録が完了しました"); } else { alert("カード情報が正しくありません。"); } }); }); } }, false );
他に対処法はございますでしょうか?
この問題に関して、アドバイスいただけると幸いです。宜しくお願い致します????♀️
回答1件
あなたの回答
tips
プレビュー