неопределенный метод `sass 'для # <Rails :: Application :: Configuration на Heroku - PullRequest
20 голосов
/ 13 октября 2011

Я немного осмотрелся и не обнаружил подобных ошибок.Я не помню, чтобы я изменил мой production.rb.И, если быть точным, вот мои application.rb

Вот трассировка стека от Heroku.

$ heroku run rake db:migrate --remote staging --trace

Running rake db:migrate --trace attached to terminal... up, run.2
/app/vendor/bundle/ruby/1.9.1/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53:      warning: already initialized constant WFKV_
rake aborted!

undefined method `sass' for #<Rails::Application::Configuration:0x000000047c6fb0>
/app/vendor/bundle/ruby/1.9.1/gems/railties-3.1.1/lib/rails/railtie/configuration.rb:78:in `method_missing'
/app/config/application.rb:63:in `<class:Application>'
/app/config/application.rb:18:in `<module:Instantice>'
/app/config/application.rb:17:in `<top (required)>'
/app/Rakefile:5:in `require'
/app/Rakefile:5:in `<top (required)>'
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2/lib/rake/rake_module.rb:25:in `load'
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:495:in `raw_load_rakefile'
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:78:in `block in load_rakefile'
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_exception_handling'
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:77:in `load_rakefile'
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:61:in `block in run'
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_exception_handling'
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:59:in `run'
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2/bin/rake:32:in `<top (required)>'
/app/vendor/bundle/ruby/1.9.1/bin/rake:19:in `load'
/app/vendor/bundle/ruby/1.9.1/bin/rake:19:in `<main>'

Сначала я думал, что эта строка в application.rb может бытьвызывая это (хотя это никогда не было раньше).

config.sass.preferred_syntax = :sass

Однако удаление было бесплодным.

Ответы [ 3 ]

34 голосов
/ 17 ноября 2011

У меня была такая же ошибка ...

Мне просто нужно было вывести gem 'sass-rails' из группы активов

Был

#Gemfile
group :assets do
   gem 'sass-rails'  # Was giving me errors here.
   ...
end

Is

#Gemfile
gem 'sass-rails'    # No more errors
group :assets do
   ...
end
5 голосов
/ 19 октября 2011

Я потратил весь день вчера на устранение неполадок, и мне удалось это исправить.Я удалил строку config.sass.preferred_syntax, но это была не единственная проблема.

Самое главное, что мне не хватало того, что кажется важным требованием для Sprockets.Поскольку я использую RSpec, я прокомментировал разделение обычной строки require "rails/all" в моем файле application.rb на это:

require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
# require "rails/test_unit/railtie"

Я могу только догадываться, что это было упущением при обновлении с Rails 3.х до 3.1.х.Правильное утверждение должно включать Sprockets, как показано ниже:

require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
# require "rails/test_unit/railtie"
require "sprockets/railtie"

Я также удалил некоторые настройки Compass. Я почерпнул Chris Eppstein Gist при использовании Compass с 3.1 .Это был отчаянный шаг, но пока я не видел никаких минусов.

Имейте в виду, я понятия не имел, что я делал.Возьмите это с крошкой соли, я просто объясняю свой процесс «отладки».

0 голосов
/ 05 ноября 2015

Я нашел лучший способ решить эту проблему, если вы также обновляетесь с проекта rails 3.0: просто измените строки в config / application.rb с

Bundler.require(:default, Rails.env) if defined?(Bundler)

на

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end
...