Подтвердить что ты не робот

Почему файлы js в моем конвейере ресурсов rails не компилируются?

У меня возникает проблема, подобная этому вопросу: Консоль Rails не включает необходимые файлы в манифесте application.js Однако этот вопрос был закрыт, поэтому я повторно его прошу, но с особенностями моей ситуации.)

Окружающая среда:

Ruby 2.0.0, Rails 3.2.8, OSX 10.7.5, Chrome 28.0.1500.95

Основная проблема, с которой я столкнулся

Файлы, помещенные в "/app/assets/javascripts", как представляется, не компилируются или не отображаются в "/public/assets"

Пример

Если я помещаю файл, такой как этот файл test.js в app/assets/javascripts:

  alert("Hello!");

а затем перезагрузите страницу в моем приложении, это предупреждение должно появиться. (Я воспроизвожу то, что делает Райан Бэйтс в своем Railscast на Asset Pipeline в ~ 6: 30 в видео) Однако оповещения не появляется.

Отладочные попытки

Некоторые тесты, которые я сделал, чтобы отладить это.

  • (Как рекомендовано @Aidan ниже) Если я "rm -rf public/assets", тогда добавьте "javascript_include_tag" test "в мой макет, предупреждение появляются. Однако, может быть, потому, что я n00b, я не знаю, как это помогает мне отладить проблему.
  • Если я добавлю // = require_test в app/javascripts/application.js к моему файл манифеста, это не приводит к появлению предупреждения.

Мой файл манифеста (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 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 TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require_tree .

Мой файл application.rb

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

Выход консоли Rails для "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/[email protected]/gems/coffee-rails-3.2.2/lib/assets/javascripts",
 "/Users/Anders/.rvm/gems/[email protected]/gems/jquery-rails-3.0.4/vendor/assets/javascripts"

Мои представления/макеты/файл application.html.haml

!!! 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"

Источник со страницы приложения, просмотренной в 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>

Что я вижу при просмотре "localhost: 3000/assets/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?

[... исключение из jquery исключено]

Я не вижу здесь файл test.js?

Какие-нибудь предложения относительно проблемы? Есть ли дополнительная информация, которую я могу предоставить, чтобы помочь отладить эту проблему? Спасибо за любую помощь!

4b9b3361

Ответ 1

Проблема, похоже, связана с моими версиями rails/gem. После обновления с Rails 3.2.8 до Rails 3.2.14 (что также потребовало обновления градиента стойки с 1.4.1 до 1.4.5) проблема была решена, а элементы в активах /javascripts теперь компилируются/добавляются в public/assets. Обратите внимание, что я создал совершенно новую gemset как часть этого, поэтому проблема, возможно, не имела никакого отношения к версии Rails и просто была вопросом "поврежденного" набора драгоценных камней, который необходимо было восстановить.

Ответ 2

Rails скомпилирует все цели, перечисленные в config.assets.precompile. Эти цели будут скомпилированы до public/assets/. Этот элемент конфигурации уже включает в себя "application.js" и другие некоторые цели, поэтому вам нужно добавить любые другие цели, которые вы хотите скомпилировать до public/assets/. Исходный файл, который должен быть скомпилирован для какой-либо конкретной цели, автоматически вычисляется на основе имени цели; например, цель test.js будет скомпилирована из app/assets/javascripts/test.js или из app/assets/javascripts/test.js.coffee, в зависимости от того, что существует.