8

Ich entwickle eine 3.1 Rails App mit Twitter Bootstrap mit seyhunak's gem.Javascript - Twitter bootstrap jquery Plugins nicht für die Produktion kompiliert

Auf dem Produktionsbetrieb konnte ich grundlegende Bootstrap CSS und JS durch Pipeline Precompilieren verwenden:

RAILS_ENV=production bundle exec rake assets:precompile 

die Edelstein-Datei verwenden:

group :assets do 
    gem 'sass-rails', '~> 3.1.5' 
    gem 'coffee-rails', '~> 3.1.1' 
    gem 'uglifier', '>= 1.0.3' 
    gem "twitter-bootstrap-rails" 
end 

Und die application.js Datei:

//= require_tree . 

//= require jquery 
//= require jquery_ujs 
//= require twitter/bootstrap 
//= require bootstrap-tab 
//= require bootstrap-modal 
//= require bootstrap-dropdown 
//= require bootstrap-popover 

Die Anwendung funktionierte gut außer für die Bootstrap-Plugins wie mo dals und dropdowns. Diese Plugins existieren als statische Javascript-Bibliotheken bestehende innerhalb des Anbieters Assets Verzeichnis:

/vendor/assets/javascripts/bootstrap-dropdown.js 
... 

Ich bin nicht sicher, ob diese Dateien vorkompilierte wird oder nicht, wie kann ich es schaffe, dies zu tun?

Antwort

8

Es gefunden!

Es war kein Problem von Bootstrap, sondern mit jQuery ordnungsgemäß vorkompilieren. Genauso wenig wie die JavaScript-Dateien für einzelne Plugins eingebunden werden müssen. Sie sind bereits im twitter/bootstrap enthalten.

Problem wurde durch erneutes Anordnen der Javascripts Dateien wie folgt gelöst:

application.js

//= require jquery 
//= require jquery_ujs 
//= require twitter/bootstrap 

Gemfile

group :assets do 
    gem 'sass-rails', '~> 3.1.5' 
    gem 'coffee-rails', '~> 3.1.1' 
    gem 'uglifier', '>= 1.0.3' 
    gem "twitter-bootstrap-rails" 
end 

gem 'jquery-rails', '>= 1.0.12' 

Precompling die Vermögenswerte und gearbeitet!

+0

Das war nicht GENAU die Lösung, die für mich funktionierte, aber es brachte mich in die richtige Richtung. Danke – Arcolye

+1

@Arcolye - Bitte sag mir, wie du es gemacht hast ... – Philip

1

In Ihrem /vendor/assets/javascripts Ort eine Datei vendor_js.js mit folgendem Inhalt:

//= require_tree . 

Jetzt in Ihrem /app/assets/javascripts/application.js umfassen eine Linie

//= require vendor_js 

Sie die vendor_js.js nur anpassen können bestimmten Anbieter Plugins umfassen , z.B Verwenden Sie //= require bootstrap-dropdown, um nur die Bootstrap-Dropdown-Elemente in das Verzeichnis vavents javascripts aufzunehmen.

UPDATE KOMMENTAR widerzuspiegeln

Da Sie die Bootstrap-JS-Dateien in Verkäufer/Javascripts manuell setzen, bitte alle Bootstrap-bezogenen require s von Ihrem application.js entfernen und sie in vendor_js.js Paste wie oben erwähnt. Stellen Sie sicher, dass Sie den richtigen Pfad erhalten (falls Sie die Dateien in ein Unterverzeichnis stellen). Stellen Sie außerdem sicher, dass Sie jede Datei einzeln einschließen und die Einfügung der QuickInfo vor dem Popover platzieren, da das Popover von der zuerst zu ladenden QuickInfo abhängt.

+0

Ich versuchte es auf diese Weise und es funktionierte im Entwicklungsmodus, vorkompiliert die Vermögenswerte wieder und die Plugins und andere Sachen immer noch nicht im Produktionsmodus arbeiten :( –

+1

Könnten Sie überprüfen, ob die Assets korrekt vorkompiliert sind, dh der Datei-Hash angehängt ist zum Dateinamen? In der Theorie sollten sie.Wenn dies der Fall ist, könnte es ein anderes Problem sein, z.B. Namensraumkonflikte etc. Ich habe keine Twitter-Bootstrap-Rails verwendet - aber bist du sicher, dass der Edelstein in die Gruppe "Assets" geht? Wie haben Sie die 2 spezifischen Plugins in das Vendor-Verzeichnis bekommen, während andere sich in einem anderen Verzeichnis befinden? – emrass

+0

Es scheint, dass der Plugin-Code in der vorkompilierten application.js existiert, aber aus irgendeinem Grund erkennt der Browser ihn nicht. –

Verwandte Themen