2013-02-08 8 views
11

Ho un'app per rails che utilizza Mongoid 3 in esecuzione su Heroku. L'ho appena aggiornato per usare Unicorn. Quando provo a distribuirlo a Heroku ottengo il seguente errore:L'unicorno innesca l'errore mongoid durante l'asset precompilato

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' 

La piena stacktrace è disponibile all'indirizzo http://pastebin.com/8YcJHEmS

Ma se tolgo dalla mia Unicorn Gemfile, la compilazione beni riesce. Esaminando il codice Mongoid, posso vedere che l'errore si verifica quando il file mongoid.yml viene analizzato, ma non riesco a capire perché Unicorn causerebbe il fallimento. Il mio file mongoid.yml simile a questo:

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

E il mio 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' 

Avreste qualche idea di cosa sta causando questo?

risposta

7

Rails 3:

Cercate di spegnere l'inizializzazione app quando le attività di pre-compilazione:

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

La linea dovrebbe essere già là commentate.

+0

Questo l'ha risolto, grazie! – AdrienF

+0

Strano però, ho commentato quella linea * out * e per me continua a fallire. –

+2

Apparentemente questo non è più supportato in Rails 4.0 (si dice che non è necessario) e sembra che stia ricevendo questo errore. –

14

Come ho recentemente avuto questo problema con Rails 4.0 e config.assets.initialize_on_precompile = false non ha più alcun effetto con Rails 4.0 Ho parlato con il supporto di Heroku ed è stato detto di usare questo Labs:

heroku labs:enable user-env-compile 

non ero in grado di ottenere una risposta sul motivo per cui l'ambiente utente è necessario solo con Unicorn, ma sembra essere un problema specifico di unicorno di qualche tipo o Thin fa qualcosa che impedisce l'avvio dell'intera app.

Il tutto mi sembra strano e ha un odore di problema con il modo in cui le risorse sono precompilate.

+2

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