2013-02-08 11 views
11

Ich habe eine App mit Schienen, die Mongoid 3 auf Heroku verwendet. Ich habe es gerade aktualisiert, um Unicorn zu verwenden. Wenn ich versuche, es zu Heroku bereitstellen bekomme ich folgende Fehlermeldung:Unicorn löst einen Mongoid-Fehler während der Vorkompilierung des Assets aus

Running: rake assets:precompile 
rake aborted! 
    undefined method `match' for nil:NilClass 
    /tmp/build_3nnbzpfmnjpns/vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.21/lib/mongoid/sessions/mongo_uri.rb:49:in `initialize' 

Der vollständige Stacktrace kann bei http://pastebin.com/8YcJHEmS

findet Aber wenn ich Einhorn von meinem Gemfile entfernen, gelingt es das Vermögen Kompilation. Wenn ich in den Mongoid-Code schaue, kann ich sehen, dass der Fehler passiert, wenn die mongoid.yml-Datei geparst wird, aber ich kann nicht herausfinden, warum Unicorn das zum Scheitern bringen würde. Meine mongoid.yml Datei sieht wie folgt aus:

production: 
    sessions: 
    default: 
     uri: <%= ENV['MONGOHQ_URL'] %> 
     options: 
     skip_version_check: true 
     safe: true 

Und mein Gemfile:

source 'https://rubygems.org' 
ruby '1.9.3' 

gem 'rails', '3.2.11' 
gem 'thin' 

group :assets do 
    gem 'sass-rails', '~> 3.2' 
    gem 'coffee-rails', '~> 3.2' 
    gem 'uglifier', '>= 1.0.3' 
    gem "twitter-bootstrap-rails", '>=2.1.8' 
    gem "bootstrap_form" 

end 

gem "jquery-rails" 
gem 'jquery-ui-rails', "3.0.1" 

gem 'newrelic_rpm' 
gem "httparty" 
gem "resque" 
gem "resque-loner" 
gem "unicorn", "4.4.0" 
gem "mongoid", "~> 3.0.0" 
gem "mongo", "~> 1.7.0" 
gem "bson", "~> 1.7" 
gem "bson_ext", "~> 1.7" 
gem 'less-rails', "~> 2.2" 
gem 'therubyracer', '>= 0.11.1' 
gem 'libv8', '~> 3.11.8' 
gem 'devise', '~> 2.1.2' 
gem 'devise_invitable', '~> 1.0.0' 
gem 'bootstrap_form' 
gem 'font-awesome-rails' 
gem 'omniauth' 
gem 'omniauth-facebook' 
gem 'kaminari' 
gem 'mongoid_search' 

Möchten Sie eine Ahnung, was dies verursacht?

Antwort

7

Rails 3:

Versuchen App Initialisierung auszuschalten, wenn Vermögen vor der Kompilierung:

# config/application.rb 
config.assets.initialize_on_precompile = false 

Die Linie dort bereits kommentiert werden sollte.

+0

Das hat es gelöst, danke! – AdrienF

+0

Seltsam, ich habe diese Zeile kommentiert * out * und es schlägt immer noch so für mich. –

+2

Scheinbar wird dies nicht mehr in Rails 4.0 unterstützt (es wird erwähnt, dass es nicht notwendig ist) und ich scheine diesen Fehler zu bekommen. –

14

Als ich dieses Problem mit Rails 4.0 und config.assets.initialize_on_precompile = false nicht vor kurzem hatte hat mehr wirksam mit Rails 4.0 I mit Heroku Unterstützung gesprochen und ich wurde gesagt, dieses Labor zu verwenden verfügen:

heroku labs:enable user-env-compile 

ich nicht in der Lage war, eine Antwort bekommen, warum die Benutzerumgebung nur mit Unicorn notwendig ist, aber es scheint ein Unicorn-spezifisches Problem irgendeiner Art zu sein oder Thin tut etwas, das verhindert, dass die gesamte App booten kann.

Das Ganze scheint mir seltsam und riecht nach einem Problem mit der Art, wie Assets vorkompiliert werden.

+2

https://devcenter.heroku.com/articles/labs-user-env-compile – Andrei