type - Rails 4 jQuery, scripts de Javascript y de café no funcionan
script de javascript en html (4)
Soy nuevo en rails y desarrollo web, aunque tengo casi dos décadas de C / C ++ en sistemas de control y firmware, y bastantes guiones de shell y perl.
No puedo hacer que jquery funcione sin incluirlo explícitamente, a pesar de que está en el manifiesto de application.js, y no puedo hacer que ninguno de los coffeescripts individuales funcione en absoluto.
Ubuntu 14.04LTS, ruby 2.2.1p85, rieles 4.2.0
application.js
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
application.html.erb
<%= render "layouts/header" %>
<%= render "layouts/sidenav" %>
<%= yield %>
<%= render "layouts/footer" %>
_header.html.erb
<html>
<head>
<title>My Application Title</title>
<%= stylesheet_link_tag ''application'', media: ''all'', ''data-turbolinks-track'' => true %>
<%= stylesheet_link_tag ''intranet'' %>
<%= stylesheet_link_tag ''form'' %>
<%= javascript_include_tag ''application'', ''data-turbolinks-track'' => true %>
<%= csrf_meta_tags %>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="shortcut icon" href="favicon.ico" />
</head>
<body>
...
Gemfile
source ''https://rubygems.org''
# Bundle edge Rails instead: gem ''rails'', github: ''rails/rails''
gem ''rails'', ''4.2.0''
# Use sqlite3 as the database for Active Record
#gem ''sqlite3''
# Use postgresql as the database for Active Record
gem ''pg''
# Use SCSS for stylesheets
gem ''sass-rails'', ''~> 5.0''
# Use Uglifier as compressor for JavaScript assets
gem ''uglifier'', ''>= 1.3.0''
# Use CoffeeScript for .coffee assets and views
gem ''coffee-rails'', ''~> 4.1.0''
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem ''therubyracer'', platforms: :ruby
# Use jquery as the JavaScript library
gem ''jquery-rails''
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem ''turbolinks''
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem ''jbuilder'', ''~> 2.0''
# bundle exec rake doc:rails generates the API under doc/api.
gem ''sdoc'', ''~> 0.4.0'', group: :doc
# Pagination gem
gem ''kaminari''
# Use ActiveModel has_secure_password
# gem ''bcrypt'', ''~> 3.1.7''
# Use Unicorn as the app server
# gem ''unicorn''
# Use Capistrano for deployment
# gem ''capistrano-rails'', group: :development
group :development, :test do
# Call ''byebug'' anywhere in the code to stop execution and get a debugger console
gem ''byebug''
# Access an IRB console on exception pages or by using <%= console %> in views
gem ''web-console'', ''~> 2.0''
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem ''spring''
end
config / application.rb
require File.expand_path(''../boot'', __FILE__)
require ''rails/all''
# Require the gems listed in Gemfile, including any gems
# you''ve limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module Boe
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = ''Central Time (US & Canada)''
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join(''my'', ''locales'', ''*.{rb,yml}'').to_s]
# config.i18n.default_locale = :de
# Do not swallow errors in after_commit/after_rollback callbacks.
config.active_record.raise_in_transactional_callbacks = true
end
end
Tengo once controladores y vistas de los 27 construidos, y todos funcionan bien, excepto que no había probado ningún javascript hasta ayer. No estaba obteniendo el comportamiento esperado, por lo que en mi vista de "personas" agregué:
...
<script>
$(document).ready(function(){
alert("jQuery is running!");
});
</script>
...
Para verificar y ver si jQuery estaba funcionando en absoluto. Si agrego <%= javascript_include_tag ''jquery.js'' %>
antes de csrf_meta_tag, recibo el mensaje de alerta pero coffeescript y el resto todavía no funcionan. Sin la inclusión explícita de jquery, no obtengo nada.
He visto muchas, muchas publicaciones sobre esto, pero ninguna de ellas ha funcionado. Me parece que el manifiesto en application.js no se está leyendo y / o los módulos enumerados no están incluidos, excepto que turbolink parece funcionar correctamente para medir el panel de red en el navegador cuando se mueve de una página a otra. Eliminé turbolink y se comporta de manera muy diferente.
También traté de incluir la gema jquery-turbolinks, aunque estoy seguro de que no es necesaria con la gema jquery-rails. Pero tampoco funciona con turbolinks desinstalados, así que no creo que ese sea el conflicto.
Gracias por mirar.
Intenta agregar a config / application.rb
config.assets.enabled = true
También puede querer:
config.assets.initialize_on_precompile = true
Rails 4 agrega automáticamente las gemas sass-rails, coffee-rails y uglifier a tu Gemfile, que son utilizadas por Sprockets para la compresión de activos. Entonces no hay necesidad de agregar la gema explícitamente.
No es necesario agregar jquery con javascript_include_tag, incluir su archivo de aplicación en su lugar y dejar que el inventario de activos haga su trabajo. Algo así como: aplicación <% = javascript_include_tag "%>
Para resolver este problema, creé una aplicación en blanco con solo un controlador de "bienvenida", que solo contenía el script de prueba jQuery, que funcionaba bien.
Trabajando hacia atrás desde las diferencias en los árboles de la aplicación desnuda, encontré que otro desarrollador había generado un archivo de coffeescript vacío:
app/assets/javascript/application.coffee
Eliminé este archivo y la aplicación funciona correctamente. La acción javascript_include_tag
ahora lee el manifiesto e incluye los diversos módulos de javascript, incluidos jQuery, jQuery-ujs y turbolinks.
inicia tu aplicación localmente abre tu aplicación en cualquier navegador. Abra el código fuente de la página. Verifique si existe la siguiente línea
<script src="/assets/jquery.js?body=1" data-turbolinks-track="true">
y si puedes ver el contenido de la siguiente manera
/*!
* jQuery JavaScript Library v1.11.1
* http://jquery.com/
*
* Includes Sizzle.js
* http://sizzlejs.com/
..........
..........
soon ....
entonces jQuery funciona en su aplicación