8

Estoy desarrollando una aplicación de 3.1 Rails con Twitter Bootstrap usando seyhunak's gem.javascript - Plugins de Twitter bootstrap jquery no compilados para la producción

En el modo de producción, yo era capaz de utilizar CSS y JS de arranque básica a través de la tubería compilación previa:

RAILS_ENV=production bundle exec rake assets:precompile 

Usando el archivo de la gema:

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 

y el archivo application.js:

//= require_tree . 

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

La aplicación funcionó bien a excepción de los complementos de arranque como mo dals y desplegables. Estos plugins existen bibliotecas de javascript como estáticas existentes dentro del directorio de proveedores activos:

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

No estoy seguro de si estos archivos se están precompilados o no, ¿cómo puedo llegar a hacer eso?

Respuesta

8

¡Lo encontró!

No fue un problema de bootstrap, sino más bien con la precompilación de jQuery. Además, no es necesario incluir los archivos javascript para los complementos individuales. Ya están incluidos en el Twitter/bootstrap principal.

problema fue resuelto por re-organización de los archivos JavaScript archivos de la siguiente manera:

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 los activos y funcionó!

+0

Esto no fue EXACTAMENTE la solución que funcionó para mí, pero me ayudó a ir en la dirección correcta. Gracias – Arcolye

+1

@Arcolye - Por favor, dime cómo lo hiciste ... – Philip

1

En su lugar /vendor/assets/javascripts un archivo vendor_js.js con el siguiente contenido:

//= require_tree . 

En su /app/assets/javascripts/application.js incluyen una línea

//= require vendor_js 

Puede personalizar los vendor_js.js para incluir sólo los plugins específicos del proveedor , p.ej utilizando //= require bootstrap-dropdown para incluir solo los menús desplegables de arranque dentro del directorio javascripts del proveedor.

se actualizan para reflejar COMENTARIOS

Dado que se pone el arranque de archivos JS en proveedores/javascript manualmente, por favor, elimine todos los relacionados con arranque-require s de sus application.js y pegarlos en vendor_js.js como se señaló anteriormente. Asegúrese de obtener el camino correcto (en caso de que ponga los archivos en un subdirectorio). También asegúrese de incluir cada archivo por separado y coloque la inclusión de información sobre herramientas antes de popover, ya que popover depende de la información sobre herramientas que se cargará primero.

+0

Probé de esta manera y funcionó en el modo de desarrollo, precompiló los activos nuevamente y los complementos y otras cosas aún no funcionaban en modo de producción :( –

+1

¿Podría verificar si los activos se precompilaron correctamente, es decir, se agregó el hash del archivo? al nombre del archivo? En teoría, deberían.Si lo son, podría ser otro problema, p. espacios de nombres, etc. No usé twitter-bootstrap-rails, pero ¿está seguro de que la gema va al grupo de "activos"? Además, ¿cómo obtuviste los dos complementos específicos en el directorio del proveedor, mientras que otros parecen estar ubicados en otro directorio? – emrass

+0

Parece que el código del complemento existe dentro de la aplicación precompilada .js, pero por alguna razón el navegador no lo reconoce. –