Готовый документ jQuery не запускается в приложении Rails 5 с ActionCable

Я только что развернул новое приложение rails 5 в рабочей среде, но не могу запустить функцию готовности документа. Приложение, включая подключение ActionCable и вывод консоли rails в инструкции о готовности документа, срабатывает локально в Chrome, Firefox и т. д.

Содержимое моего приложения/активов/javascripts/application.js:

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file. JavaScript code in this file should be added after the last require_* statement.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require featherlight.min
//= require jquery.growl
//= require cable
//= require base
//= require tradewars
//= require extensions
//= require_tree .

// TradeWars.io - application.js file

var Mining_Loop_Iterator = false;

$(document).ready(function() {

  console.log("Initializing new TradeWars class...");
  TradeWars = new TradeWarsClass();
  console.log("Applying click handlers...");
  TradeWars.applyClickHandlers();

  console.log("Attempting to create WebSocket...");

  App.game = App.cable.subscriptions.create({
    channel: "GameChannel"
  }, {
    connected: function() {},
    disconnected: function() {},
    received: function(data) {
      console.log('Received via ActionCable :: ' + data.message.method + ' :');
      console.log(data);
      if (data.message.method == 'disable_mining') {
        TradeWars.disableMining(data.message);
      } else if (data.message.method == 'offer_chest') {
        TradeWars.offerChest();
      } else {
        // Refresh
        TradeWars.animateDigging(data.message);
        TradeWars.refresh(data.message);
      }
      return true;
    },
    mine: function(clicks_per_second) {
      return this.perform('mine', {
        clicks_per_second: clicks_per_second
      });
    }
  });

  TradeWars.miningLoop();

});

У меня также есть это встроенное в HTML загружаемой страницы:

<script>

$(document).ready(function() {

    setTimeout(function() {

      TradeWars.planet_id = 21;

    }, 5000);

});

</script>

Когда это в конечном итоге срабатывает, я получаю ошибку javascript «ReferenceError: TradeWars не определен».

Я включил конвейер ресурсов в рельсах и предварительно компилирую ресурсы через командную строку с помощью:

bin/rails assets:precompile

Я также получаю ошибку JavaScript (как при локальной разработке, так и при производстве):

Uncaught Error: Bootstrap tooltips require Tether (http://tether.io/)

Но я не думаю, что это было бы так, плюс я не хочу устанавливать Tether.

Любая помощь приветствуется.


person railsguy42    schedule 22.12.2016    source источник


Ответы (1)


Работая с другим разработчиком, мы пробовали различные исправления.

Вот несколько вещей, которые мы сделали в первую очередь, чтобы убедиться, что Action Cable работает должным образом.

В production.rb:

config.action_cable.url = "ws://tradewars.io/cable"

В макет приложения (application.html.erb) добавлено:

<%= action_cable_meta_tag %>

Затем, в конечном счете, проблема была решена (мы полагаем) исправлением ошибки Tether!

Uncaught Error: Bootstrap tooltips require Tether (http://tether.io/)

Добавив гем tether-rails в Gemfile:

gem 'tether-rails'

Затем выполните шаги, описанные здесь: https://github.com/jakegavin/tether-rails.

«Неперехваченная ошибка» (привязь) исчезла, и jQuery волшебным образом начал запускать событие готовности документа!

Гоша обожаю эту профессию.

person railsguy42    schedule 23.12.2016