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.