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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

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

JavaScript

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

Q&A

解決済

2回答

189閲覧

Railsアプリの開発段階では問題ないJSが、Herokuにデプロイしたらうまく機能しない。

Gr.

総合スコア89

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

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

JavaScript

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

0グッド

0クリップ

投稿2019/02/06 23:47

railsでテスト開発したアプリをherokuにデプロイしたら、様々な不具合が生じています。
今回はjsがうまく機能しない問題です。

html

1<table class="index-table"> 2 <tr> 3  <th>順位</th> 4  <th>名前</th> 5  <th>カウント</th> 6  <th>リンク</th> 7 </tr> 8 <% @tops.each_with_index do |f, i| %> 9 <tr class="index-table-tr"> 10  <td class="index-table-rank"><%= i+1 %></td> 11  <td class="index-table-name"><%= f.name %></td> 12  <td class="index-table-count"> 13   <% if f.likes_count.nil? %> 14    0 15   <% else %> 16    <%= f.likes_count %> 17   <% end %> 18  </td> 19  <td class="index-table-link"> 20   <%= link_to book_path(f) do %><i class="fas fa-search"></i><% end %> 21  </td> 22 </tr> 23 <% end %> 24</table>

js

1$(function() { 2 var counter = 0; 3 var text =""; 4 var target=""; 5 $($('.index-table-tr').get().reverse()).each(function(){ 6 if ($(this).children('.index-table-count').text() == text) { 7 counter++; 8 if(target !="") 9 target.remove(); 10 } 11 else { 12 if(target !="") 13 target.attr('rowSpan', counter); 14 counter=1; 15 } 16 text = $(this).children('.index-table-count').text(); 17 target = $(this).children('.index-table-rank'); 18 }); 19});

上記は、カウント数が同じだった場合に以下のように順位のセルを統合して表示するためのコードです。

順位名前カウントリンク
1aaa100リンク
2ddd90リンク
3eee75リンク
4bbb75リンク
5ccc55リンク
順位名前カウントリンク
1aaa100リンク
2ddd90リンク
3eee75リンク
bbb75リンク
5ccc55リンク

※3位と4位の順位セルを縦に結合(文字は中央に寄ります)

この表記でローカルでは問題なく表示されますが、herokuにデプロイしたら下のように崩れて表示されます。

順位名前カウントリンク
1aaa100リンク
ddd90リンク
eee75リンク
bbb75リンク
ccc55リンク

原因と解決法を教えてください。

$ rails assets:precompile してから更新しましたが変化ありません。

デベロッパーツールでconsoleを見てもエラーは何もでていません。

herokuデプロイ後に不具合が出て順次解消していっていますが、いままではローカル環境とサーバー環境でのデータベースの違い(sqlite3, postgresql)によるものでした。そのように、「データベースの違い」といった感じで根本的な原因がわかれば色々調べて自己解決できるでしょうが、この件はローカル環境とサーバー環境で何が食い違っているのかわかりません。なぜローカルで動くjsがデプロイ後にエラー表示もなく崩れるのでしょうか。

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

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

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

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

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

guest

回答2

0

jsがブラウザにキャッシュされていたりしないでしょうか?
キャッシュをクリアするか、シークレットモードにするかして確認してみてください。

投稿2019/02/07 03:20

Kta-M

総合スコア456

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

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

Gr.

2019/02/07 05:09

Kta-Mさん 単純なミスだったため、自己解決できました。すみません。 キャッシュが残っていてうまく機能しないこともありえますね。 回答ありがとうございました。
guest

0

自己解決

単純なミスでした。

controller

1def index 2 @tops = Book.all.order(likes_count: "desc").limit(20) 3end

コントローラーで上記のように数の多い順に20件だけデータを取っていたのですが、本番環境ではlikes_countにデータをまだ20件分入れておらず、likes_countがnilとなっているものが含まれていたため崩れていました。

以下のように、likes_countがnilの場合「0」と表記するようにしていたので、nilではなく0とカウントされていると勘違いしてしまっていました。

html

1<% if f.likes_count.nil? %> 2 0 3<% else %> 4 <%= f.likes_count %> 5<% end %>

20件分likes_countを入れたらちゃんと表示されるようになりました。
お騒がせしました。

投稿2019/02/07 05:20

Gr.

総合スコア89

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問