Błąd poczas wykonywania bundle exec rake assets:precompile [SOLVED]

Witam.

Mam problem. Ponieważ napisałem apkę z użyciem RoR i wykorzystywałem w niej gem’y do bootstrapa. Niestety podczas próby generowania plików na serwer produkcyjny dostaję błąd. Nie znalazłem nigdzie jednoznacznej odpowiedzi w czym leży problem. Dodam, ze nie tworzyłem własnych plików scss. Jedyne pliki, które zmieniałem to podane poniżej application.js i application.css i custom.css.scss

damian@damian-E720 ~/i/H/t/HolidayManager [127]> bundle exec rake assets:precompile RAILS_ENV=production --trace
** Invoke assets:precompile (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
** Execute assets:precompile
I, [2014-07-25T11:40:15.704218 #16244]  INFO -- : Writing /home/damian/i4b/HolidayManager/trunk/HolidayManager/public/assets/custom-d2e12901048d61afd71170542b6016f8.css
rake aborted!
Sass::SyntaxError: Undefined variable: "$alert-padding".
  (in /home/damian/.rvm/gems/ruby-2.0.0-p481/gems/bootstrap-sass-3.1.1.1/vendor/assets/stylesheets/bootstrap/_alerts.scss:10)
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/bootstrap-sass-3.1.1.1/vendor/assets/stylesheets/bootstrap/_alerts.scss:10
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/script/variable.rb:49:in `_perform'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/script/node.rb:40:in `perform'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:298:in `visit_prop'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/base.rb:37:in `visit'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:100:in `visit'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/base.rb:53:in `block in visit_children'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/base.rb:53:in `map'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/base.rb:53:in `visit_children'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:109:in `block in visit_children'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:121:in `with_environment'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:108:in `visit_children'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/base.rb:37:in `block in visit'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:320:in `visit_rule'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/base.rb:37:in `visit'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:100:in `visit'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/base.rb:53:in `block in visit_children'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/base.rb:53:in `map'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/base.rb:53:in `visit_children'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:109:in `block in visit_children'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:121:in `with_environment'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:108:in `visit_children'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/base.rb:37:in `block in visit'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:128:in `visit_root'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/base.rb:37:in `visit'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:100:in `visit'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb:7:in `visit'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/tree/root_node.rb:20:in `render'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/engine.rb:315:in `_render'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-3.2.19/lib/sass/engine.rb:262:in `render'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sass-rails-4.0.3/lib/sass/rails/template.rb:22:in `evaluate'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/tilt-1.4.1/lib/tilt/template.rb:103:in `render'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/context.rb:197:in `block in evaluate'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/context.rb:194:in `each'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/context.rb:194:in `evaluate'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/processed_asset.rb:12:in `initialize'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/base.rb:374:in `new'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/base.rb:374:in `block in build_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/base.rb:395:in `circular_call_protection'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/base.rb:373:in `build_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/index.rb:94:in `block in build_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/caching.rb:58:in `cache_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/index.rb:93:in `build_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/base.rb:287:in `find_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/index.rb:61:in `find_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/bundled_asset.rb:16:in `initialize'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/base.rb:377:in `new'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/base.rb:377:in `build_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/index.rb:94:in `block in build_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/caching.rb:58:in `cache_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/index.rb:93:in `build_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/base.rb:287:in `find_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/index.rb:61:in `find_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/manifest.rb:211:in `block in find_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/manifest.rb:257:in `benchmark'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/manifest.rb:210:in `find_asset'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/manifest.rb:119:in `block in compile'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/manifest.rb:118:in `each'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/sprockets/manifest.rb:118:in `compile'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-rails-2.1.3/lib/sprockets/rails/task.rb:61:in `block (3 levels) in define'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-2.11.0/lib/rake/sprocketstask.rb:146:in `with_logger'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/sprockets-rails-2.1.3/lib/sprockets/rails/task.rb:60:in `block (2 levels) in define'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/task.rb:240:in `call'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/task.rb:240:in `block in execute'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/task.rb:235:in `each'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/task.rb:235:in `execute'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/task.rb:179:in `block in invoke_with_call_chain'
/home/damian/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/task.rb:172:in `invoke_with_call_chain'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/task.rb:165:in `invoke'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/application.rb:150:in `invoke_task'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/application.rb:106:in `block (2 levels) in top_level'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/application.rb:106:in `each'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/application.rb:106:in `block in top_level'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/application.rb:115:in `run_with_threads'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/application.rb:100:in `top_level'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/application.rb:78:in `block in run'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/application.rb:176:in `standard_exception_handling'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/lib/rake/application.rb:75:in `run'
/home/damian/.rvm/gems/ruby-2.0.0-p481/gems/rake-10.3.2/bin/rake:33:in `<top (required)>'
/home/damian/.rvm/gems/ruby-2.0.0-p481/bin/rake:23:in `load'
/home/damian/.rvm/gems/ruby-2.0.0-p481/bin/rake:23:in `<main>'
/home/damian/.rvm/gems/ruby-2.0.0-p481/bin/ruby_executable_hooks:15:in `eval'
/home/damian/.rvm/gems/ruby-2.0.0-p481/bin/ruby_executable_hooks:15:in `<main>'
Tasks: TOP => assets:precompile
damian@damian-E720 ~/i/H/t/HolidayManager [1]> 

Mój Gemfile

source 'https://rubygems.org'
    ruby '2.0.0'
    
    gem 'rails', '~> 4.0.4'
    
    gem 'sass-rails', '~> 4.0.3'
    gem 'uglifier', '>= 2.5.1'
    gem 'coffee-rails', '~> 4.0.1'
    gem 'jquery-rails', '~> 3.1.0'
    gem 'turbolinks', '~> 2.2.2'
    gem 'jbuilder', '~> 1.5.3'
    gem 'bootstrap-sass', '~> 3.1.1.1'
    gem 'autoprefixer-rails'
    gem 'bcrypt', '~> 3.1.7'
    gem 'bootstrap-will_paginate', '~> 0.0.10'
    gem 'pg', '~> 0.17.1' # on Linux run 'sudo apt-get install libpq-dev'
    gem 'rails_12factor', '~> 0.0.2'
    gem 'table_builder', '~> 0.2.3'
    gem "watu_table_builder", '~> 0.3.0'
    gem 'momentjs-rails', '~> 2.5.0'
    gem 'bootstrap3-datetimepicker-rails', '~> 3.0.0.1'
    gem 'google-api-client', '~> 0.7.1', :require => 'google/api_client'
    gem 'google_calendar', '~> 0.3.1'
    gem 'figaro', '~> 0.7.0'
    gem 'fullcalendar-rails', '~> 1.6.4.0'
    
    group :test do
      gem 'selenium-webdriver', '2.35.1'
      gem 'capybara', '2.1.0'
      gem "factory_girl_rails", "4.2.1"
      gem "database_cleaner", "1.3.0"
    end
    
    group :development do
      gem 'rspec-rails', '~> 2.13.1'
    end
    
    group :development, :test do
      gem "guard-rspec", "3.1.0"
      gem "spork-rails", "4.0.0"
      gem "guard-spork", "1.5.1"
      gem "childprocess", "0.5.3"
    end
    
    group :doc do
      # bundle exec rake doc:rails generates the API under doc/api.
      gem 'sdoc', require: false
    end
    
    # Use ActiveModel has_secure_password
    # gem 'bcrypt', '~> 3.1.7'
    
    # Use unicorn as the app server
    # gem 'unicorn'
    
    # Use Capistrano for deployment
    # gem 'capistrano', group: :development
    
    # Use debugger
    # gem 'debugger', group: [:development, :test]

application.css

/*
 *= require_self
 *= require bootstrap
 *= require bootstrap-datetimepicker
 *= require fullcalendar
 */

importy z application.js

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap
//= require moment
//= require bootstrap-datetimepicker
//= require fullcalendar

custom.css.scss

@import "bootstrap";
@import "bootstrap/theme";

Usun bootstrap z require z pliku application.css, przenies zawartosc custom.css.scss (importy) do tego pliku (application.css) i zamien rozszerzenie z css na css.scss (czyli na application.css.scss)

Zrobiłem tak (zresztą gdzieś na StackOverflow też to zalecali). niestety nie pomogło.

application.css.scss

/*
*= require_self
*= require bootstrap-datetimepicker
*= require fullcalendar
*/
@import "bootstrap";
@import "bootstrap/theme";

custom.css.scsss jest pusty.

Sprawdzałem tez po dodaniu require_tree . i z importami przed i po require.

Jakieś inne pomysły?

Zawsze moge w production.rb zamienić

config.assets.precompile = ['*.js', '*.css', '*.css.erb']

na

config.assets.precompile = ['*.js', '*.css.erb']

omijając błąd, ale wtedy pliki css nie podlegają prekompilacji.

Zamien tez require datetimepicker na @import ‘bootstrap-datetimepicker’;

Pokusiłem się nawet na import fullcalendar. Niestety lipa. Sprawdziłem pozostałe pliki scss czy gdzieś nie ma dodatkowgo importu. Niestety nie :confused:

application.css.scss

/*
*= require_self
*/
@import "fullcalendar";
@import "bootstrap";
@import "bootstrap/theme";
@import "bootstrap-datetimepicker";

I caly czas masz blad, ktory dotyczy braku tej samej zmiennej ?

Dokładnie. Nic się nie zmienia

Sass::SyntaxError: Undefined variable: "$alert-padding".

Moglbys sprobowac dodac przed pierwszym importem

@import "bootstrap-sprockets";

I zaktualizowac wersje do 3.2

Aktualizacja zrobiona. Dogenerowało dodatkowo parę plików i znowu.

I, [2014-07-25T14:19:20.288215 #25476]  INFO -- : Writing /home/damian/i4b/HolidayManager/trunk/HolidayManager/public/assets/application-762d58297989619cb027c2f13c3024cb.js
I, [2014-07-25T14:19:34.735702 #25476]  INFO -- : Writing /home/damian/i4b/HolidayManager/trunk/HolidayManager/public/assets/application-34a35cd362d6d425f7a470f4eded1bbf.css
I, [2014-07-25T14:19:35.959644 #25476]  INFO -- : Writing /home/damian/i4b/HolidayManager/trunk/HolidayManager/public/assets/_bootstrap-compass-9cc0575249625b8d8648563841072913.css
I, [2014-07-25T14:19:35.988062 #25476]  INFO -- : Writing /home/damian/i4b/HolidayManager/trunk/HolidayManager/public/assets/_bootstrap-sprockets-9cc0575249625b8d8648563841072913.css
I, [2014-07-25T14:19:44.555748 #25476]  INFO -- : Writing /home/damian/i4b/HolidayManager/trunk/HolidayManager/public/assets/bootstrap-b8e6b64322cd5822571bebf50a41ed10.css
I, [2014-07-25T14:23:02.922167 #25873]  INFO -- : Writing /home/damian/i4b/HolidayManager/trunk/HolidayManager/public/assets/application-85fb914eb926b71a7aedcaf71f9724e9.js
I, [2014-07-25T14:23:16.101979 #25873]  INFO -- : Writing /home/damian/i4b/HolidayManager/trunk/HolidayManager/public/assets/application-0517b3028f19fc67cd3299f9f048bb3e.css
rake aborted!
Sass::SyntaxError: Undefined variable: "$alert-padding".
(in /home/damian/.rvm/gems/ruby-2.0.0-p481/gems/bootstrap-sass-3.2.0.0/assets/stylesheets/bootstrap/_alerts.scss:10)

Czy aby na pewno nie zmienia się nic w plikach production.rb albo application.rb? Wiem, że nic nie ma na ten temat na GitHubie ale lapiej spytać

production.rb

# Compress JavaScripts and CSS.
config.assets.js_compressor = :uglifier
#config.assets.css_compressor = :sass
...
config.assets.precompile = ['*.js', '*.css', '*.css.erb']

i dodatkowy wpisik w application.rb

config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)

EDYTKA:
Zawartość taga head.

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<%= csrf_meta_tags %>
<style type="text/css">
   @font-face {   font-family: 'Glyphicons Halflings';
      src: url('/assets/bootstrap/glyphicons-halflings-regular.eot');
      src: url('/assets/bootstrap/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),
      url('/assets/bootstrap/glyphicons-halflings-regular.woff') format('woff'),
      url('/assets/bootstrap/glyphicons-halflings-regular.ttf') format('truetype'),
      url('/assets/bootstrap/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); }
</style>

Dodam jeszcze, że RubyMine podkreśla na czerwono importy z bootstrapem z wyjątkiem datetimepickera. fullcalendar też nie jest podkreślony.

EDYTKA numer 2
Jak przyglądam się budowie gemów widać, że sa one zupełnie inaczej zbudowane.
https://github.com/eternicode/bootstrap-datepicker/tree/release

Teraz do mnie doszlo…

config.assets.precompile = [’.js’, '.css’, ‘*.css.erb’]

Przeciez tutaj generujesz osobno wszystkie pliki css - po co ? Usun te linijke - niech bedzie domyslna.

Powiniennes generowac jedynie application.css

1 Like

No i problem rozwiązany. Dzięki wielkie :slight_smile: