2014-12-29 10 views
8

Pracownicy HTML5 zazwyczaj polegają na zewnętrznych skryptach przy użyciu importScripts(). Skąd takie skrypty powinny wchodzić w Rails 4, aby były normalizowane w normalny sposób, zgodnie z potokiem zasobów, a mimo to nadal działają poprawnie?Gdzie umieścić plik robota sieciowego w Railsach 4?

Są pewne problemy podczas pracy z rurociągu aktywów, które należy rozwiązać:

  1. Skrypty zewnętrzne, jeśli są umieszczone pod vendor/assets, nie są przetwarzane przez rurociąg aktywów domyślnie (co nie było sprawa w Railsach 3).
  2. Jeśli skrypty są umieszczone pod app/assets, należy je uwzględnić w application.js, aby mogły być przetwarzane. Jednak pliki robocze nie powinny być zawarte w połączonych wynikach (tj. application-[digest].js).
  3. Jeśli skrypty zostaną uwzględnione w konfiguracji zasobów, pliki wynikowe będą zawierać skróty w nazwie pliku. Aby załadować pracownika, trzeba podać przeglądarce swoją ścieżkę (np. new Worker('myWorker.js'). W jaki sposób możemy znaleźć ścieżkę? (Próbowałem asset_path, ale to nie działało)
  4. Podobnie jak w 3, pracownicy muszą odwołać się . Inne pliki według nazwy Dzwoniąc importScripts() Jak dowiadujemy się ścieżkę do ładowania
+0

zawsze skończyć z moich pracowników i importu folder '/ public', ale muszę powiedzieć, że nie jestem bardzo zadowolony z tego podejścia. –

Odpowiedz

0

według konwencji (co nie jest tak popularny) należy przejść do vendor/assets aby być precyzyjnym:?.

  • app/ wszystko, co jest ściśle związane z tą konkretną aplikacją
  • lib/ cały kod, który został napisany przez ciebie, ale nie jest zobowiązany do aplikacji (można albo zostaną wyodrębnione do osobnego gem) kod
  • vendor/ wszystkich stron trzecich
+0

Dziękuję za odpowiedź, ale konwencja nie jest tutaj użyta. Zaktualizowałem moje pytanie, aby wyjaśnić prawdziwy problem. –

3

Dla ktoś przychodzi tu z Google - możesz użyć Inline Workers.

Inline Pracownicy

Co jeśli chcesz utworzyć skrypt pracownika w locie, lub utworzyć stronę samodzielne bez konieczności tworzenia osobnych plików pracownika? Z Blob(), można „inline” Twój pracownik w tym samym pliku HTML jako główny logiki tworząc uchwyt URL do kodu pracownika jako wyrażenie:

var blob = new Blob([ 
    "onmessage = function(e) { postMessage('msg from worker'); }"]); 

// Obtain a blob URL reference to our worker 'file'. 
var blobURL = window.URL.createObjectURL(blob); 

var worker = new Worker(blobURL); 
worker.onmessage = function(e) { 
    // e.data == 'msg from worker' 
}; 
worker.postMessage(); // Start the worker.