application.css не используется в качестве актива

ИЗМЕНИТЬ 4, 5 и 6

8 часов, любые другие идеи приветствуются :) Возможно, эта ошибка уже известна и решена, но я получаю поведение, описанное в редактировании 2 и 3, когда у вас есть это в файле .css.erb в app/assets/stylesheets :

li {
    background-image: url(<%= asset_path "logo_80px_80px.png" %>);
}

Проблема заключается в вызове метода asset_path, но .css.scss также прерывает его:

li {
    background-image: url(image-path("logo_80px_80px.png"));
}

Мой GemFile:

source 'http://rubygems.org'

gem 'rails', '3.1.3'
gem 'pg', '0.11.0'
gem 'gravatar_image_tag', '1.0.0.pre2'
gem 'will_paginate'
gem 'rake'
gem 'jquery-rails'
gem 'nested_form'
gem 'acts-as-taggable-on'

gem 'sass-rails'
group :assets do
  gem 'coffee-rails', '~> 3.1.0'
  gem 'uglifier', '>= 1.0.3'
end

group :development do
  gem 'rspec-rails', '2.5.0'
  gem 'annotate', '2.4.0'
  gem 'faker', '0.3.1'
end


group :test do
  gem 'rspec', '2.5.0'
  gem 'webrat', '0.7.1'
  gem 'factory_girl_rails', '1.0'
end

group :production do
  gem 'therubyracer-heroku'
end

Мой Gemfile.lock:

GEM
  remote: http://rubygems.org/
  specs:
    actionmailer (3.1.3)
      actionpack (= 3.1.3)
      mail (~> 2.3.0)
    actionpack (3.1.3)
      activemodel (= 3.1.3)
      activesupport (= 3.1.3)
      builder (~> 3.0.0)
      erubis (~> 2.7.0)
      i18n (~> 0.6)
      rack (~> 1.3.5)
      rack-cache (~> 1.1)
      rack-mount (~> 0.8.2)
      rack-test (~> 0.6.1)
      sprockets (~> 2.0.3)
    activemodel (3.1.3)
      activesupport (= 3.1.3)
      builder (~> 3.0.0)
      i18n (~> 0.6)
    activerecord (3.1.3)
      activemodel (= 3.1.3)
      activesupport (= 3.1.3)
      arel (~> 2.2.1)
      tzinfo (~> 0.3.29)
    activeresource (3.1.3)
      activemodel (= 3.1.3)
      activesupport (= 3.1.3)
    activesupport (3.1.3)
      multi_json (~> 1.0)
    acts-as-taggable-on (2.2.1)
      rails (~> 3.1)
    annotate (2.4.0)
    arel (2.2.1)
    builder (3.0.0)
    coffee-rails (3.1.1)
      coffee-script (>= 2.2.0)
      railties (~> 3.1.0)
    coffee-script (2.2.0)
      coffee-script-source
      execjs
    coffee-script-source (1.1.3)
    diff-lcs (1.1.3)
    erubis (2.7.0)
    execjs (1.2.12)
      multi_json (~> 1.0)
    factory_girl (1.3.3)
    factory_girl_rails (1.0)
      factory_girl (~> 1.3)
      rails (>= 3.0.0.beta4)
    faker (0.3.1)
    gravatar_image_tag (1.0.0.pre2)
    hike (1.2.1)
    i18n (0.6.0)
    jquery-rails (1.0.19)
      railties (~> 3.0)
      thor (~> 0.14)
    json (1.6.3)
    mail (2.3.0)
      i18n (>= 0.4.0)
      mime-types (~> 1.16)
      treetop (~> 1.4.8)
    mime-types (1.17.2)
    multi_json (1.0.4)
    nested_form (0.1.1)
    nokogiri (1.5.0-x86-mingw32)
    pg (0.11.0-x86-mingw32)
    polyglot (0.3.3)
    rack (1.3.5)
    rack-cache (1.1)
      rack (>= 0.4)
    rack-mount (0.8.3)
      rack (>= 1.0.0)
    rack-ssl (1.3.2)
      rack
    rack-test (0.6.1)
      rack (>= 1.0)
    rails (3.1.3)
      actionmailer (= 3.1.3)
      actionpack (= 3.1.3)
      activerecord (= 3.1.3)
      activeresource (= 3.1.3)
      activesupport (= 3.1.3)
      bundler (~> 1.0)
      railties (= 3.1.3)
    railties (3.1.3)
      actionpack (= 3.1.3)
      activesupport (= 3.1.3)
      rack-ssl (~> 1.3.2)
      rake (>= 0.8.7)
      rdoc (~> 3.4)
      thor (~> 0.14.6)
    rake (0.9.2.2)
    rdoc (3.12)
      json (~> 1.4)
    rspec (2.5.0)
      rspec-core (~> 2.5.0)
      rspec-expectations (~> 2.5.0)
      rspec-mocks (~> 2.5.0)
    rspec-core (2.5.2)
    rspec-expectations (2.5.0)
      diff-lcs (~> 1.1.2)
    rspec-mocks (2.5.0)
    rspec-rails (2.5.0)
      actionpack (~> 3.0)
      activesupport (~> 3.0)
      railties (~> 3.0)
      rspec (~> 2.5.0)
    sass (3.1.12)
    sass-rails (3.1.5)
      actionpack (~> 3.1.0)
      railties (~> 3.1.0)
      sass (~> 3.1.10)
      tilt (~> 1.3.2)
    sprockets (2.0.3)
      hike (~> 1.2)
      rack (~> 1.0)
      tilt (~> 1.1, != 1.3.0)
    therubyracer-heroku (0.8.1.pre3)
    thor (0.14.6)
    tilt (1.3.3)
    treetop (1.4.10)
      polyglot
      polyglot (>= 0.3.1)
    tzinfo (0.3.31)
    uglifier (1.2.0)
      execjs (>= 0.3.0)
      multi_json (>= 1.0.2)
    webrat (0.7.1)
      nokogiri (>= 1.2.0)
      rack (>= 1.0)
      rack-test (>= 0.5.3)
    will_paginate (3.0.2)

PLATFORMS
  x86-mingw32

DEPENDENCIES
  acts-as-taggable-on
  annotate (= 2.4.0)
  coffee-rails (~> 3.1.0)
  factory_girl_rails (= 1.0)
  faker (= 0.3.1)
  gravatar_image_tag (= 1.0.0.pre2)
  jquery-rails
  nested_form
  pg (= 0.11.0)
  rails (= 3.1.3)
  rake
  rspec (= 2.5.0)
  rspec-rails (= 2.5.0)
  sass-rails
  therubyracer-heroku
  uglifier (>= 1.0.3)
  webrat (= 0.7.1)
  will_paginate

Содержимое application.rb:

require File.expand_path('../boot', __FILE__)

require 'rails/all'


if defined?(Bundler)
  Bundler.require(*Rails.groups(:assets => %w(development test)))
end

module AjpApp
  class Application < Rails::Application
    config.encoding = "utf-8"
    config.filter_parameters += [:password]
    config.assets.enabled = true
    config.assets.version = '1.0'
  end
end

config/environments/production.rb содержимое:

AjpApp::Application.configure do
  config.cache_classes = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.serve_static_assets = false
  config.assets.compress = true
  config.assets.compile = true
  config.assets.digest = true
  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify
end

--- Заархивировано ---

ИСХОДНОЕ СООБЩЕНИЕ

У меня есть приложение Rails 3.1, которое обслуживало файл application.css в рабочем режиме. После некоторых несвязанных проблем я узнал о предварительная компиляция ресурсов с использованием:

bundle exec rake assets:precompile RAILS_ENV=production

Мой файл application.css, предварительно скомпилированный для создания: «application-79d6fafe46c10758d8f5a921f1e55ecd.css», но теперь не обслуживается, несмотря на то, что он присутствует в папке public/assets. Файл application.js обслуживается нормально (как application-9a36deba94d6308ab9bebe4e30a93959.js). Также я отмечаю, что эта проблема впервые появилась после того, как я создал файл .css.erb, как это было предложено в статье на прекомпиляция.

Любые мысли о том, что я пытаюсь сделать? Я собираюсь попытаться отменить файл .css.erb, снова запустить предварительную компиляцию и посмотреть, обслужен ли мой файл application.css.

ИЗМЕНИТЬ 1

Проблема возникает не при замене файла .css на .css.erb. И эрб работает нормально. Проблема возникает, когда используется функция asset_path, например:

.button_one {
    background-image: url(<%= asset_path "activities/text_editor_toolbar.png" %>);
}

Это работает, чтобы дать правильную строку, например: assets/activities/text_editor_toolbar.png", которая отображается в скомпилированном файле application-(hash).css, который обслуживается в режиме разработки, но не в режиме производства. Это так странно. :| :@

Редактировать 2 Хорошо, стало лучше, но еще более странно. Кажется, если я запущу его один раз в производственном режиме, он выйдет из строя. Запустите его снова в разработке, затем снова в производстве, и он потратит целую вечность и запустит ' Microsoft Console Based Script Host», так же как он предварительно компилирует активы, что, судя по выходным данным, похоже, он делает, прежде чем окончательно отобразить страницу и успешно обслужить application-(hash).css:

C:\documents\ror\ajp_app>rails s -e production
=> Booting WEBrick
=> Rails 3.1.3 application starting in production on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-12-19 23:59:12] INFO  WEBrick 1.3.1
[2011-12-19 23:59:12] INFO  ruby 1.9.2 (2011-07-09) [i386-mingw32]
[2011-12-19 23:59:12] INFO  WEBrick::HTTPServer#start: pid=4052 port=3000
cache: [GET /] miss


Started GET "/" for 127.0.0.1 at 2011-12-19 23:59:26 +0000
  Processing by PagesController#home as HTML
Rendered pages/home.html.erb within layouts/application (85.0ms)
Rendered layouts/_header.html.erb (2.0ms)
Rendered layouts/_footer.html.erb (1.0ms)
Completed 200 OK in 393ms (Views: 382.0ms | ActiveRecord: 10.0ms)
cache: [GET /assets/application-a05ca896e645eacb50266c7866d18a0f.css] miss


Started GET "/assets/application-a05ca896e645eacb50266c7866d18a0f.css" for 127.0.0.1 at 2011-12-19 23:59:27 +0000
Nonexistent asset application-a05ca896e645eacb50266c7866d18a0f.css @ a05ca896e645eacb50266c7866d18a0f
Served asset /application-a05ca896e645eacb50266c7866d18a0f.css - 404 Not Found (44ms)

ActionController::RoutingError (No route matches [GET] "/assets/application-a05ca896e645eacb50266c7866d18a0f.css"):


Rendered C:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.1.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout
 (1.0ms)
[2011-12-19 23:59:39] INFO  going to shutdown ...
[2011-12-19 23:59:39] INFO  WEBrick::HTTPServer#start done.
Exiting

C:\documents\ajp_app>rails s
=> Booting WEBrick
=> Rails 3.1.3 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-12-20 00:00:14] INFO  WEBrick 1.3.1
[2011-12-20 00:00:14] INFO  ruby 1.9.2 (2011-07-09) [i386-mingw32]
[2011-12-20 00:00:14] INFO  WEBrick::HTTPServer#start: pid=2752 port=3000


Started GET "/" for 127.0.0.1 at 2011-12-20 00:00:20 +0000
  Processing by PagesController#home as HTML
  ←[1m←[36m (0.0ms)←[0m  ←[1mSHOW search_path←[0m
  ←[1m←[35mUser Load (1.0ms)←[0m  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Rendered pages/home.html.erb within layouts/application (171.0ms)
Compiled application.css  (4ms)  (pid 2752)
Compiled colours.css  (9ms)  (pid 2752)
Compiled custom.css  (1ms)  (pid 2752)
Compiled activity.css  (26ms)  (pid 2752)
Compiled jquery/jquery-ui-1.8.13.custom.css  (1ms)  (pid 2752)
Compiled ellib/elcommon.css  (30ms)  (pid 2752)
Compiled ellib/eldialogform.css  (0ms)  (pid 2752)
Compiled elrte/elrte.css  (0ms)  (pid 2752)
Compiled activities/text_editor.css  (2ms)  (pid 2752)
Compiled errors.activities.css  (0ms)  (pid 2752)
Compiled errors_and_notices.css  (0ms)  (pid 2752)
Compiled general.css  (0ms)  (pid 2752)
Compiled application.js  (15ms)  (pid 2752)
Compiled jquery.js  (13ms)  (pid 2752)
Compiled jquery_ujs.js  (0ms)  (pid 2752)
Compiled jquery-ui.js  (19ms)  (pid 2752)
Compiled AJP_main.js  (1ms)  (pid 2752)
Compiled ajp.utilities.js  (2ms)  (pid 2752)
Rendered layouts/_header.html.erb (4.0ms)
Rendered layouts/_footer.html.erb (2.0ms)
Completed 200 OK in 1091ms (Views: 1076.0ms | ActiveRecord: 15.0ms)


Started GET "/assets/custom.css?body=1" for 127.0.0.1 at 2011-12-20 00:00:28 +0000
Served asset /custom.css - 304 Not Modified (6ms)


Started GET "/assets/jquery/jquery-ui-1.8.13.custom.css?body=1" for 127.0.0.1 at 2011-12-20 00:00:28 +0000
Served asset /jquery/jquery-ui-1.8.13.custom.css - 304 Not Modified (7ms)


Started GET "/assets/ellib/eldialogform.css?body=1" for 127.0.0.1 at 2011-12-20 00:00:28 +0000
Served asset /ellib/eldialogform.css - 304 Not Modified (5ms)


Started GET "/assets/elrte/elrte.css?body=1" for 127.0.0.1 at 2011-12-20 00:00:28 +0000
Served asset /elrte/elrte.css - 304 Not Modified (5ms)


Started GET "/assets/activities/text_editor.css?body=1" for 127.0.0.1 at 2011-12-20 00:00:28 +0000
Served asset /activities/text_editor.css - 304 Not Modified (9ms)


Started GET "/assets/activity.css?body=1" for 127.0.0.1 at 2011-12-20 00:00:28 +0000
Served asset /activity.css - 200 OK (10ms)


Started GET "/assets/errors.activities.css?body=1" for 127.0.0.1 at 2011-12-20 00:00:28 +0000
Served asset /errors.activities.css - 304 Not Modified (3ms)


Started GET "/assets/errors_and_notices.css?body=1" for 127.0.0.1 at 2011-12-20 00:00:28 +0000
Served asset /errors_and_notices.css - 304 Not Modified (3ms)


Started GET "/assets/general.css?body=1" for 127.0.0.1 at 2011-12-20 00:00:28 +0000
Served asset /general.css - 304 Not Modified (3ms)


Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2011-12-20 00:00:28 +0000
Served asset /jquery.js - 304 Not Modified (12ms)


Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2011-12-20 00:00:28 +0000
Served asset /jquery_ujs.js - 304 Not Modified (8ms)


Started GET "/assets/jquery-ui.js?body=1" for 127.0.0.1 at 2011-12-20 00:00:29 +0000
Served asset /jquery-ui.js - 304 Not Modified (42ms)


Started GET "/assets/AJP_main.js?body=1" for 127.0.0.1 at 2011-12-20 00:00:29 +0000
Served asset /AJP_main.js - 304 Not Modified (3ms)


Started GET "/assets/ajp.utilities.js?body=1" for 127.0.0.1 at 2011-12-20 00:00:29 +0000
Served asset /ajp.utilities.js - 304 Not Modified (10ms)


Started GET "/assets/ellib/elcommon.css?body=1" for 127.0.0.1 at 2011-12-20 00:00:29 +0000
Served asset /ellib/elcommon.css - 304 Not Modified (5ms)


Started GET "/assets/colours.css?body=1" for 127.0.0.1 at 2011-12-20 00:00:29 +0000
Served asset /colours.css - 304 Not Modified (12ms)


Started GET "/assets/activities/hello.png" for 127.0.0.1 at 2011-12-20 00:00:30 +0000
Served asset /activities/hello.png - 404 Not Found (13ms)

ActionController::RoutingError (No route matches [GET] "/assets/activities/hello.png"):


Rendered C:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.1.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout
 (1.0ms)
[2011-12-20 00:00:37] INFO  going to shutdown ...
[2011-12-20 00:00:37] INFO  WEBrick::HTTPServer#start done.
Exiting

C:\documents\ajp_app>rails s -e production
=> Booting WEBrick
=> Rails 3.1.3 application starting in production on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-12-20 00:01:17] INFO  WEBrick 1.3.1
[2011-12-20 00:01:17] INFO  ruby 1.9.2 (2011-07-09) [i386-mingw32]
[2011-12-20 00:01:17] INFO  WEBrick::HTTPServer#start: pid=5912 port=3000
cache: [GET /] miss


Started GET "/" for 127.0.0.1 at 2011-12-20 00:01:20 +0000
  Processing by PagesController#home as HTML
Rendered pages/home.html.erb within layouts/application (91.0ms)
Rendered layouts/_header.html.erb (3.0ms)
Rendered layouts/_footer.html.erb (1.0ms)
Completed 200 OK in 400ms (Views: 387.0ms | ActiveRecord: 12.0ms)
cache: [GET /assets/application-a05ca896e645eacb50266c7866d18a0f.css] miss, store


Started GET "/assets/application-a05ca896e645eacb50266c7866d18a0f.css" for 127.0.0.1 at 2011-12-20 00:01:21 +0000
Compiled application-a05ca896e645eacb50266c7866d18a0f.css  (4ms)  (pid 5912)
Compiled colours.css  (9ms)  (pid 5912)
Compiled custom.css  (0ms)  (pid 5912)
Compiled activity.css  (21ms)  (pid 5912)
Compiled jquery/jquery-ui-1.8.13.custom.css  (1ms)  (pid 5912)
Compiled ellib/elcommon.css  (0ms)  (pid 5912)
Compiled ellib/eldialogform.css  (1ms)  (pid 5912)
Compiled elrte/elrte.css  (1ms)  (pid 5912)
Compiled activities/text_editor.css  (0ms)  (pid 5912)
Compiled errors.activities.css  (1ms)  (pid 5912)
Compiled errors_and_notices.css  (0ms)  (pid 5912)
Compiled general.css  (0ms)  (pid 5912)
Served asset /application-a05ca896e645eacb50266c7866d18a0f.css - 200 OK (871ms)
cache: [GET /assets/application-9a36deba94d6308ab9bebe4e30a93959.js] miss


Started GET "/assets/application-9a36deba94d6308ab9bebe4e30a93959.js" for 127.0.0.1 at 2011-12-20 00:01:22 +0000
Compiled application-9a36deba94d6308ab9bebe4e30a93959.js  (9ms)  (pid 5912)
Compiled jquery.js  (13ms)  (pid 5912)
Compiled jquery_ujs.js  (1ms)  (pid 5912)
Compiled jquery-ui.js  (19ms)  (pid 5912)
Compiled AJP_main.js  (0ms)  (pid 5912)
Compiled ajp.utilities.js  (32ms)  (pid 5912)
Served asset /application-9a36deba94d6308ab9bebe4e30a93959.js - 304 Not Modified (110802ms)
cache: [GET /assets/logo_80px_80px-27d7b084daa398621574b10963529e84.png] miss


Started GET "/assets/logo_80px_80px-27d7b084daa398621574b10963529e84.png" for 127.0.0.1 at 2011-12-20 00:03:13 +0000
Served asset /logo_80px_80px-27d7b084daa398621574b10963529e84.png - 304 Not Modified (3ms)
cache: [GET /assets/hello.png] miss


Started GET "/assets/hello.png" for 127.0.0.1 at 2011-12-20 00:03:13 +0000
Served asset /hello.png - 404 Not Found (3ms)

ActionController::RoutingError (No route matches [GET] "/assets/hello.png"):


Rendered C:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.1.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout
 (1.0ms)

. . . :-Делать ?

Редактировать 3. Вам не нужно сначала запускать его один раз в рабочем режиме (т. е. на самом деле это процесс разработки, который запускает производственный режим для (?) повторной предварительной компиляции ресурсов. ). После использования rake для предварительной компиляции ресурсов его просто нужно запустить в режиме разработки, запросить страницу (что необходимо), затем запустить в рабочей среде, и повторного запроса домашней страницы достаточно, чтобы запустить то, что похоже на вторую прекомпиляцию.

Теперь это пережило полную перезагрузку моей машины (win 7-64bit). Так что я думаю, что это последовательная ошибка.

Является ли StackOverflow лучшим местом для продолжения этого обсуждения или лучше перейти на страницу Sprocket git-hub или что?


person AJP    schedule 19.12.2011    source источник
comment
Компилируется ли он в действительный css? Вы пытались использовать URL-адрес изображения?   -  person Pedro Nascimento    schedule 20.12.2011
comment
Да, это действительный css. отлично работает в разработке. Просто не обслуживается в производстве. Выдает ошибку: ActionController::RoutingError (No route matches [GET] "/assets/application-b2949754ecb8dda278c219b2cf589c83.css") несмотря на то, что файл там.... немного сходит с ума.   -  person AJP    schedule 20.12.2011
comment
Не могли бы вы также вставить config/application.rb и config/environments/production.rb?   -  person Pedro Nascimento    schedule 20.12.2011
comment
Сделанный. Спасибо за вашу помощь до сих пор Педро. Очень признателен.   -  person AJP    schedule 20.12.2011
comment
@AJP Как ты это решил? Я также получаю ту же ошибку.   -  person Sonali Gupta    schedule 15.02.2015
comment
@SonaliGupta извините, слишком давно. Я не могу вспомнить сейчас. Я бы порекомендовал сделать новый пост и дать ссылку на него из этого раздела комментариев, если вы не можете решить его из того, что вы найдете здесь.   -  person AJP    schedule 16.02.2015


Ответы (3)


У меня была точно такая же проблема, и я решил ее, изменив этот параметр на true (по умолчанию он false) в моем файле production.rb.

  # Disable Rails's static asset server (Apache or nginx will already do this)
  config.serve_static_assets = true

Насколько я понимаю, установка для этого параметра значения false имеет смысл, если вы работаете под Apache или nginx, что не было в моем случае.

person yorah    schedule 16.01.2012
comment
Если вы используете Heroku, вам также нужно установить для этого параметра значение false. - person Aaron Gray; 15.07.2013

У меня была эта проблема на днях, и я решил ее, отредактировав файл production.rb.

config.assets.compress = true
config.assets.compile = true
config.assets.digest = true
config.assets.initialize_on_precompile = false

Являются ли настройки актива, с которыми я закончил. Я предварительно компилирую свои активы при развертывании с помощью capistrano.

До того, как я отредактировал настройки актива, у меня была точно такая же проблема. .css запрашивался и был скомпилирован в мою папку public/assets, но сервер не смог найти файлы.

person Benjamin Udink ten Cate    schedule 20.12.2011
comment
Эй, Бенджамин. Большое спасибо за вашу помощь. К сожалению, это предложение не сработало в моем случае, все еще получая ActionController::RoutingError (No route matches [GET] "/assets/application-3af646520ce8a8ac4b46dae627c89a0a.css") при запуске в производственном режиме. Однако он отлично обслуживает файлы .js и .png. Как странно. - person AJP; 20.12.2011

Для простоты мне нравится использовать расширение .css.scss и использовать:

li {
    background-image: image-url("logo_80px_80px.png");
}

Полный справочник можно найти в Руководствах по Rails в Разделе 2.2.2. .

person Phil Bottomley    schedule 20.12.2011