2015-05-21 3 views
0

Я новичок в рельсах и веб-разработке, хотя у меня почти два десятилетия C/C++ в системах управления и прошивке, а также довольно много сценариев оболочки и perl.Rails 4 jQuery, javascript и кофейные скрипты не работают

Я не могу заставить jquery работать без явного включения его, даже если он находится в манифесте application.js, и я не могу заставить кого-либо из отдельных кофейных скриптов работать вообще.

Ubuntu 14.04LTS, рубин 2.2.1p85, рельсы 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 

конфигурации/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 

У меня есть одиннадцать контроллеров и представлений из 27 построен, и все они работают хорошо, за исключением, что я не пробовал любой JavaScript до вчерашнего дня. Я не получал какой-либо ожидаемого поведения, поэтому на мой взгляд, индекс «люди», я добавил:

... 
<script> 
$(document).ready(function(){ 
    alert("jQuery is running!"); 
}); 
</script> 
... 

Чтобы проверить и посмотреть, если JQuery работает на всех. Если я добавлю <%= javascript_include_tag 'jquery.js' %> перед csrf_meta_tag, я получаю сообщение с предупреждением, но coffeescript, а остальные все еще не работают. Без явного включения jquery я ничего не получаю.

Я просмотрел много, много сообщений об этом, но никто из них не работал. Мне кажется, что манифест в application.js не читается и/или перечисленные модули не включены, за исключением того, что турболинк, по-видимому, нормально работает, просматривая панель сети в браузере при переходе со страницы на страницу. Я удалил турболинк, и он ведет себя совсем по-другому.

Я также пробовал включить jquery-turbolinks gem, хотя, несмотря на то, что я уверен, что это не нужно с самоцветом jquery-rails. Но он не работает с отключенными турболинками, поэтому я не думаю, что это конфликт.

Спасибо, что посмотрели.

+0

Можете ли вы разместить свой файл config/application.rb, удалив любые чувствительные элементы, конечно? Похоже, что у конвейера есть проблемы или он отключен. – GoGoCarl

+0

Это шток. Добавлено выше. –

ответ

3

Чтобы решить эту проблему, я создал пустое приложение только с «welcome», содержащий только скрипт сценария jQuery, который отлично работал.

Работа в обратном направлении от различий в деревьях от невооруженного приложения, я обнаружил, что другой разработчик уже сгенерировал пустой файл CoffeeScript:

app/assets/javascript/application.coffee 

Я удалил этот файл и приложение работает должным образом. Фонд javascript_include_tag теперь читает манифест и включает в себя различные модули javascript, включая jQuery, jQuery-ujs и turbolinks.

+0

Был один из ваших! Ха, рад, что ты смог разобраться. Приветствия. – GoGoCarl

0

Rails 4 автоматически добавляет в ваш Gemfile сасс-рельсы, кофейные рельсы и камни-грабли, которые используются Sprockets для сжатия активов. Поэтому нет необходимости добавлять ясность явным образом.

Вам не нужно добавлять jquery с javascript_include_tag, вместо этого укажите ваш файл приложения и позвольте конвейеру активов выполнить свою задачу. Что-то вроде: <% = javascript_include_tag "приложения" %>

+0

Эти драгоценные камни были включены автоматически «рельсами нового бэ». '<% = javascript_include_tag 'application', 'data-turbolinks-track' => true%>' был включен в application.html.rb одновременно. Я переместил его в _header.html.rb. Я попытался заменить его на «<% = javascript_include_tag» приложение «%>» и «<% = javascript_include_tag: defaults%>» без заметного эффекта. –

0

Попробуйте добавить к конфигурации/application.rb

config.assets.enabled = true 

Вы также можете:

config.assets.initialize_on_precompile = true 
+0

Это не сработало. –

+0

И ты остановился и начал рельсы, верно? – GoGoCarl

+0

Да. Хотя было бы так же, как и я забыть. ;) –

0

запустить приложение локально.откройте приложение в любом браузере. Откройте исходный код страницы. Проверьте, если следующая строка существует

<script src="/assets/jquery.js?body=1" data-turbolinks-track="true"> 

и если вы можете увидеть содержание следующим образом

/*! 
* jQuery JavaScript Library v1.11.1 
* http://jquery.com/ 
* 
* Includes Sizzle.js 
* http://sizzlejs.com/ 
.......... 
.......... 
soon .... 

затем JQuery работает в вашем приложении

Смежные вопросы