tutorial rails learn ruby-on-rails ruby-on-rails-3 asset-pipeline

ruby on rails - learn - Estrategia de Rails 3.1 para precompilar activos JS específicos del controlador



ruby jobs (4)

Para mantener la lógica de JavaScript específica del controlador fuera de la application.js estándar.js y solo tenerla incluida por el controlador relevante, lo estoy colocando en su propio archivo .js y lo incluyo en base al nombre del controlador del diseño como:

<%= javascript_include_tag "application", params[:controller] %>

Eso funciona bien, pero cuando despliegue la aplicación en producción (estoy usando Capistrano y tengo configurada una tarea de precompilación), el flujo de activos no precompila ninguno de los archivos JS específicos del controlador. Supongo que esto se debe a que mi archivo JavaScript real no está referenciado por las directivas require en application.js.

¿Cómo me ocupo de esto sin mover mi JS específico del controlador de nuevo a application.js, o hacer referencia explícita a él desde application.js?

¿Hay alguna forma de indicar a la canalización de activos que precompile una lista adicional de archivos? ¿Cómo podría precompilar manualmente un archivo específico en producción?

Actualizar

Como resultado , puede especificar archivos individuales aquí en su config/environments/production.rb :

config.assets.precompile += %w( achievements.js )

... o simplemente seguí adelante y lo agregué de manera caprichosa para cada archivo JavaScript:

config.assets.precompile += %w( *.js )


Creo que tú y james_schorr no están realmente hablando de lo mismo. Debe agregar los archivos que no sean application.js a config.assets.precompile. Su respuesta fue más sobre la estructura de directorios que podría / debería adoptar, si no me equivoco.

Si quisiera tener un controlador específico, haría:

/assets /javascripts /users login.js profile.js /blogs /posts users.js blogs.js posts.js

Y por ejemplo, users.js sería:

*= require_tree ./users

De esa manera, puede mantenerse organizado (tener muchos archivos js por controlador), pero en prod, todos se incluirán en un archivo.

Todavía necesito eso en tu configuración:

config.assets.precompile += %w( *.js )


Esto es lo que hago:

estructura de directorios:

app/assets/javascripts/sessions/multiple.js app/assets/application-sessions.js

application-sessions.js solo tiene:

*= require_self *= require_tree ./sessions

Entonces en tu opinión, haz

<% if @current_controller == ''whatever'' %> <%= javascript_include_tag "application-sessions" %> <% else %> …. <% end %>

Para su información, @current_controller = controller_name en mis métodos application_controller.rb, se llama con un before_filter.


Estoy teniendo el mismo problema aquí, es un dolor de cabeza para mí.

Incluir * .js es demasiado, no quiero que todos los archivos se compilen en archivos separados, algunos de ellos se supone que se fusionan.

Mi idea es almacenar los archivos específicos del controlador en un subdirectorio, como "controladores", y luego solo incluir los controladores / *. Js o css para la precompilación.

No estoy seguro de si funciona o no, lo intentaré, de todos modos, podría ser una sugerencia útil.


Si desea precompilar el js | css que solo se encuentra en la raíz de los directorios de activos / javascripts y activos / hojas de estilo (y no su jerarquía de árbol), puede poner esto en los archivos de entorno:

Dir.chdir "#{Rails.root}/app/assets/javascripts" a = Dir.glob("*.{js,coffee,erb}") Dir.chdir "#{Rails.root}/app/assets/stylesheets" b = Dir.glob("*.{css,erb}") config.assets.precompile += a.concat(b) Dir.chdir Rails.root