質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

1回答

2328閲覧

RailsアプリのJavaScriptがAWS(EC2)の本番環境にて動作しない

yoangelo

総合スコア8

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2020/05/09 19:58

世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで - Qiita
を参考に、アプリをサーバーにアップロードしました。

ページ遷移やログイン・ログアウト機能など、大体の機能は動作することは確認できたのですが、JavaScript(jQuery)で実装した機能が動作しません。(開発環境では正しく動作しました)

なお、jQueryはgem "jquery-rails"bundle install して導入しました。

この問題の解決方法をご教示いただけないでしょうか。

行ったこと

Chromeにおけるデベロッパーツールのconsoleで検証しても、全く反応がなく特にエラーは表示されません。
以下ログも確認したところ、当然かも知れませんが特にエラーはありませんでした。

  • production.log
  • unicorn.log
  • nginx.error.log

Googleで
『Rails AWS JavaScript 動作しない 』
などでも検索してみましたが、どの記事も自分の状況とは当てはまらないようで問題の解決には至りませんでした。

ソースコード

production.rb

ruby:

1 2Rails.application.configure do 3 config.cache_classes = true 4 config.eager_load = true 5 config.consider_all_requests_local = false 6 config.action_controller.perform_caching = true 7 config.public_file_server.enabled = true 8 config.assets.js_compressor = :uglifier 9 config.assets.compile = false 10 config.active_storage.service = :local 11 config.log_level = :debug 12 config.log_tags = [ :request_id ] 13 config.action_mailer.perform_caching = false 14 config.i18n.fallbacks = true 15 config.active_support.deprecation = :notify 16 config.log_formatter = ::Logger::Formatter.new 17 18 if ENV["RAILS_LOG_TO_STDOUT"].present? 19 logger = ActiveSupport::Logger.new(STDOUT) 20 logger.formatter = config.log_formatter 21 config.logger = ActiveSupport::TaggedLogging.new(logger) 22 end 23 config.active_record.dump_schema_after_migration = false 24 config.action_mailer.default_url_options = { host: "http://XX.XX.XX.XX" } 25 config.action_mailer.raise_delivery_errors = true 26 config.action_mailer.delivery_method = :smtp 27 config.action_mailer.smtp_settings = { 28 :address => "smtp.gmail.com", 29 :port => 587, 30 :user_name => ENV["GMAIL_ADDRESS"], 31 :password => ENV["GMAIL_PASSWORD"], 32 :authentication => :plain, 33 :enable_starttls_auto => true 34 } 35end 36

application.js

javascript:

1 2//= require jquery 3//= require popper 4//= require bootstrap-sprockets 5//= require rails-ujs 6//= require activestorage 7//= require turbolinks 8//= require_tree . 9

動作させたいjsファイルとビューファイル

イメージ説明
[動作]

  • フォームに検索ワードを入力し「検索する」ボタンを押すと、ぐるなびAPIを叩いて非同期で検索結果一覧が表示される。
  • ラジオボタンをチェックして「登録する」を押すと、選択した店情報をRailsのコントローラへ渡す

javascript:

1$(document).on('turbolinks:load', function() { 2 var rest =null; 3 var cancelFlag = 0; 4 $('#search').on("click",function(e) { 5 e.preventDefault(); 6 const requestUrl = 'https://api.gnavi.co.jp/RestSearchAPI/v3/'; 7 const APIkey = $('#apikey').val(); 8 const name = $('#name').val(); 9 console.log(name); 10 11 $.ajax({ 12 type:"GET", 13 url:requestUrl, 14 data:{ 15 keyid: APIkey, 16 name: name 17 } 18 }).done(function(data) { 19 if (data != null){ 20 if(cancelFlag == 0){ 21 cancelFlag = 1; 22 rest = data.rest 23 rest.forEach(function(e){ 24 $('#rest_lists').append(`<li id="rest_list"><input type="radio" name="rest_name">${e.name}</li>`) 25 }) 26 } 27 } 28 }).fail(function() { 29 if(cancelFlag == 0){ 30 cancelFlag = 1; 31 $('.result').append(`<li>検索結果は0件でした</li>`); 32 } 33 }); 34 }); 35 36 $('#submit').on("click",function(e) { 37 const checked_index = $("input:radio").toArray().findIndex(e => e.checked); 38 $.ajax({ 39 type: "POST", 40 url: "/restaurants/create", 41 data:{ 42 name: rest[checked_index].name, 43 address: rest[checked_index].address, 44 res_id: rest[checked_index].id, 45 tell: rest[checked_index].tel 46 } 47 }).done(function(data) { 48 }).fail(function() { 49 alert('エラーが発生しました。詳細はXXXXXX@gmail.comへお問い合わせください。'); 50 }); 51 }); 52 $('#name').on("keyup",function(e) { 53 $('#rest_lists').empty(); 54 $('.result').empty(); 55 cancelFlag = 0; 56 }); 57}); 58

erb:

1<div class="result"></div> 2<input type="hidden" value="<%= ENV["GURUNAVI_API_KEY"] %>" id="apikey"> 3<input type="text" name="namae" id="name"> 4<input type="submit" value="検索する" id="search"> 5<ul id="rest_lists"> 6</ul> 7<button type="button" name="button" id="submit">登録する</button>

unicorn.conf.rb

ruby:

1$worker = 2 2$timeout = 30 3$app_dir = "/var/www/rails/my_app" 4$listen = File.expand_path 'tmp/sockets/.unicorn.sock', $app_dir 5$pid = File.expand_path 'tmp/pids/unicorn.pid', $app_dir 6$std_log = File.expand_path 'log/unicorn.log', $app_dir 7 8worker_processes $worker 9working_directory $app_dir 10stderr_path $std_log 11stdout_path $std_log 12timeout $timeout 13 14 listen $listen 15pid $pid 16 17 18preload_app true 19 20before_fork do |server, worker| 21 defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! 22 old_pid = "#{server.config[:pid]}.oldbin" 23 if old_pid != server.pid 24 begin 25 Process.kill "QUIT", File.read(old_pid).to_i 26 rescue Errno::ENOENT, Errno::ESRCH 27 end 28 end 29end 30 31after_fork do |server, worker| 32 defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection 33end

nginx confファイル

# log directory error_log /var/www/rails/my_app/log/nginx.error.log; access_log /var/www/rails/my_app/log/nginx.access.log; # max body size client_max_body_size 2G; upstream app_server { #for UNIX domain socket setups server unix:/var/www/rails/my_app/tmp/sockets/.unicorn.sock fail_timeout=0; } server { listen 80; server_name 18.177.212.209; # nginx so increasing this is generally safe... keepalive_timeout 5; # path for static files root /var/www/rails/my_app/public; # page cache loading try_files $uri/index.html $uri.html $uri @app; location @app { # HTTP headers proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app_server; } # Rails error pages error_page 500 502 503 504 /500.html; location = /500.html { root /var/www/rails/my_app/public; } }

必要であれば、他のコードも追記します。

#環境
Ruby:2.5.3
Rails:5.2.4
アプリケーションサーバー:unicorn v5.5.4
webサーバー:nginx/1.16.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

rails assets:precompile は実行しましたか?

投稿2020/05/09 23:37

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoangelo

2020/05/10 13:10

ご回答ありがとうございます。 $ rails assets:precompile すると、動作するようになりました! プリコンパイルについては以前に $ bundle exec rake assets:precompile RAILS_ENV=production というコマンドで実行していたのですが、これでは不足していたようですね…。 ありがとうございました????‍♀️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問