script que ponerlo poner pone pagina nuestro invoca forma externo ejecutar donde desde colocar codigo cargar body archivo antes javascript ruby-on-rails asset-pipeline

javascript - que - ¿Por qué no se compilan los archivos js en mi canal de activos de Rails?



javascript donde ponerlo (2)

El problema parece haber estado relacionado con mis versiones de rieles / gemas. Después de actualizar desde Rails 3.2.8 a Rails 3.2.14 (que también requirió actualizar la gema del rack de 1.4.1 a 1.4.5), el problema se resolvió y los elementos en activos / javascripts ahora se están compilando / agregando al público / activos. Tenga en cuenta que creé un gemset completamente nuevo como parte de esto, por lo que el problema no tuvo nada que ver con la versión de Rails y simplemente fue una pregunta de un conjunto de gemas "corruptas" que debían ser recreadas.

Estoy experimentando un problema similar a esta pregunta: la canalización de activos de Rails no incluye los archivos necesarios en el manifiesto de application.js Sin embargo, esa pregunta se cerró, por lo que le estoy volviendo a preguntar, pero con los detalles de mi situación.)

Ambiente:

Ruby 2.0.0, Rails 3.2.8, OSX 10.7.5, Chrome 28.0.1500.95

El principal problema que estoy experimentando.

Los archivos colocados en "/ app / asset / javascripts" no parecen estar compilando o apareciendo en "/ public / asset"

Un ejemplo

Si coloco un archivo como este archivo test.js en app / asset / javascripts:

alert("Hello!");

y luego recargar una página en mi aplicación, esta alerta debería aparecer. (Estoy replicando lo que Ryan Bates hace en su Railscast en Asset Pipeline en ~ 6: 30 en el video) Sin embargo, no aparece ninguna alerta.

Intentos de depuración

Algunas pruebas que hice para tratar de depurar esto.

  • (Según lo recomendado por @Aidan a continuación) Si "rm -rf public / asset", luego agrego "javascript_include_tag ''test''" a mi diseño, aparecerá la alerta. Sin embargo, tal vez porque soy un n00b, no sé cómo eso me ayuda a depurar el problema.
  • Si agrego // = require_test a app / javascripts / application.js a mi archivo de manifiesto, esto no hace que aparezca la alerta.

Mi archivo de manifiesto (app / 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 vendor/assets/javascripts of plugins, if any, 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 // the compiled file. // removed /sitewide from require_tree // // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT''S TO BE PROCESSED, ANY BLANK LINE SHOULD // GO AFTER THE REQUIRES BELOW. // //= require jquery //= require jquery_ujs //= require_tree .

Mi archivo application.rb

# Enable the asset pipeline config.assets.enabled = true

Salida de la consola de Rails para "y Rails.application.config.assets.paths"

"/Users/Anders/Dropbox/dev/suggestion-box-app/app/assets/images", "/Users/Anders/Dropbox/dev/suggestion-box-app/app/assets/javascripts", "/Users/Anders/Dropbox/dev/suggestion-box-app/app/assets/stylesheets", "/Users/Anders/.rvm/gems/ruby-2.0.0-p195@suggestion-box-app/gems/coffee-rails-3.2.2/lib/assets/javascripts", "/Users/Anders/.rvm/gems/ruby-2.0.0-p195@suggestion-box-app/gems/jquery-rails-3.0.4/vendor/assets/javascripts"

Mis vistas / layouts / application.html.haml file

!!! 5 %html %head %meta{:charset => "utf-8"}/ %meta{:content => "width=device-width", :name => "viewport"}/ %meta{:content => "yes", :name => "apple-mobile-web-app-capable"}/ %title My App %script{:type=>"text/javascript", :src=>"//use.typekit.net/wjb6ybj.js"} :javascript try{Typekit.load();}catch(e){} = stylesheet_link_tag "screen", :media => "all" = csrf_meta_tags = javascript_include_tag "application" %body #container = render "layouts/flashes" = yield = render "layouts/footer"

Fuente de una página de aplicación vista en localhost: 3000

<!DOCTYPE html> <html> <head> <meta charset=''utf-8''> <meta content=''width=device-width'' name=''viewport''> <meta content=''yes'' name=''apple-mobile-web-app-capable''> <title>My app</title> <script src=''//use.typekit.net/wjb6ybj.js'' type=''text/javascript''></script> <script> try{Typekit.load();}catch(e){} </script> <link href="/assets/screen.css?body=1" media="all" rel="stylesheet" type="text/css" /> <meta content="authenticity_token" name="csrf-param" /> <meta content="FqMtH+rs6or9HRx+RL4bWpQyLTNPM8BKLrcf/xZknP8=" name="csrf-token" /> <script src="/assets/application.js?body=1" type="text/javascript"></script> </head> <body> <div id=''container''> .... </div> </body> </html>

Lo que veo cuando veo "localhost: 3000 / asset / application.js"

/*! * jQuery JavaScript Library v1.9.1 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2013-2-4 */ (function(e,t){function P(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:e.nodeType===1&&t?!0:n==="array"||n!=="function"&&(t===0||typeof t=="number"&&t>0&&t-1 in e)}function B(e){var t=H[e]={};return b.each(e.match(E)||[],function(e,n){t[n]=!0}),t}function I(e,n,r,i){if(!b.acceptData(e))return;var s,o,u=b.expando,a=typeof n=="string",f=e.nodeType,c=f?

[... resto de jquery excluido]

¿No debería ver el archivo test.js aquí?

¿Alguna sugerencia sobre cuál podría ser el problema? ¿Hay alguna información adicional que pueda proporcionar para ayudar a solucionar este problema? ¡Gracias por cualquier ayuda!


Rails compilará todos los destinos listados en config.assets.precompile . Estas metas serán compiladas a public/assets/ . Ese elemento de configuración ya incluye "application.js" y otros algunos destinos, por lo que necesita agregar cualquier otro objetivo que desee precompilar a public/assets/ . El archivo de origen que se compilará para cualquier destino en particular se calcula automáticamente en función del nombre del destino; por ejemplo, un objetivo de test.js se compilaría desde app/assets/javascripts/test.js o desde app/assets/javascripts/test.js.coffee , lo que exista.