2008-10-22 7 views
4

Ok, donc j'ai une application Rails configurée sur DreamHost et je l'ai fait fonctionner il y a un moment et maintenant c'est cassé. Je ne connais pas beaucoup les environnements de déploiement ou quelque chose comme ça alors s'il vous plaît pardonnez mon ignorance. Quoi qu'il en soit, il semble que l'application se bloque à cette ligne dans config/environment.rb:Pourquoi cette ligne brise Rails avec Passenger sur DreamHost?

require File.join(File.dirname(__FILE__), 'boot') 

config/boot.rb est à peu près normale, mais je vais l'inclure ici de toute façon.

# Don't change this file! 
# Configure your app in config/environment.rb and config/environments/*.rb 

RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT) 

module Rails 
    class << self 
    def boot! 
     unless booted? 
     preinitialize 
     pick_boot.run 
     end 
    end 

    def booted? 
     defined? Rails::Initializer 
    end 

    def pick_boot 
     (vendor_rails? ? VendorBoot : GemBoot).new 
    end 

    def vendor_rails? 
     File.exist?("#{RAILS_ROOT}/vendor/rails") 
    end 

    def preinitialize 
     load(preinitializer_path) if File.exist?(preinitializer_path) 
    end 

    def preinitializer_path 
     "#{RAILS_ROOT}/config/preinitializer.rb" 
    end 
    end 

    class Boot 
    def run 
     load_initializer 
     Rails::Initializer.run(:set_load_path) 
    end 
    end 

    class VendorBoot < Boot 
    def load_initializer 
     require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer" 
     Rails::Initializer.run(:install_gem_spec_stubs) 
    end 
    end 

    class GemBoot < Boot 
    def load_initializer 
     self.class.load_rubygems 
     load_rails_gem 
     require 'initializer' 
    end 

    def load_rails_gem 
     if version = self.class.gem_version 
     gem 'rails', version 
     else 
     gem 'rails' 
     end 
    rescue Gem::LoadError => load_error 
     $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.) 
     exit 1 
    end 

    class << self 
     def rubygems_version 
     Gem::RubyGemsVersion if defined? Gem::RubyGemsVersion 
     end 

     def gem_version 
     if defined? RAILS_GEM_VERSION 
      RAILS_GEM_VERSION 
     elsif ENV.include?('RAILS_GEM_VERSION') 
      ENV['RAILS_GEM_VERSION'] 
     else 
      parse_gem_version(read_environment_rb) 
     end 
     end 

     def load_rubygems 
     require 'rubygems' 
     min_version = '1.1.1' 
     unless rubygems_version >= min_version 
      $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.) 
      exit 1 
     end 

     rescue LoadError 
     $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org) 
     exit 1 
     end 

     def parse_gem_version(text) 
     $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/ 
     end 

     private 
     def read_environment_rb 
      File.read("#{RAILS_ROOT}/config/environment.rb") 
     end 
    end 
    end 
end 

# All that for this: 
Rails.boot! 

Quelqu'un a-t-il des idées? Je ne reçois aucune erreur dans le journal ou sur la page.

-fREW

+0

Comment se bloque-t-il? Avez-vous un message d'erreur? Avez-vous des Rails gelés dans le fournisseur? – Ivan

Répondre

1

Je dirais que vous enfreignez à cause d'une version plus récente des gemmes Rails sur Dreamhost. Au moins, cela a été mon problème quand les choses ont explosé dans quelque chose comme boot.rb. Essayez de geler les gemmes de votre environnement de développement dans votre répertoire fournisseur/rails.

3

J'ai eu le même problème sur DreamHost. Le gel des rails et le déballage de toutes les gemmes m'ont permis de le dépasser.

rake rails:freeze:gems 
rake gems:unpack:dependencies 
0

Ya - le problème est pas vraiment dans boot.rb - il est juste que boot.rb est où les rails sont réellement chargés.

Vous obtiendrez ainsi une erreur de ce type si vous avez spécifié une version de Rails qui n'existe pas sur votre tranche dreamhost. Cela peut arriver si vous mettez votre projet à jour, si vous commencez un nouveau projet (et oubliez que vous avez amélioré les rails entre-temps) ou si vous utilisez une ancienne version de rails et qu'elle a été retirée du serveur dreamhost sur.

Pour savoir qui est est, regardez dans config/environment.rb la ligne qui va lire quelque chose comme:

RAILS_GEM_VERSION = '2.3.4' unless defined? RAILS_GEM_VERSION 

Ensuite ssh sur votre serveur dreamhost et tapez gem list et voir si votre version est dans la liste.

Sinon, vous pouvez essayer plusieurs options. Disons que la version que vous utilisez est 2.3.4 Pour commencer, essayez: gem install rails -v=2.3.4 puis redémarrez. C'est peut-être tout ce qui est requis. Si cela ne fonctionne pas, essayez de congeler et de déballer les gemmes (comme dans l'autre réponse ici).

Il existe également une autre possibilité: il vous manque une gemme dont dépendent les rails, mais qui échoue silencieusement - par exemple, une dépendance à une certaine version de la baie m'a échappé une fois. Mais vous pouvez également avoir d'autres dépendances gem

Si vous exécutez rake gems, vous serez en mesure de lister toutes les gemmes dont votre projet sait qu'il a besoin - assurez-vous qu'elles sont installées pour commencer. Ensuite, comme une sorte de test de fumée brut, essayez script/console - si vous manquez un gemme de rails important, script/console ne chargera pas et devrait échouer, vous donnant un avis sur la gemme dont vous avez besoin.

Mise à jour: Si vous essayez d'exécuter v 2.3.5, vous pouvez également souffrir de ce problème: Bypassing rack version error using Rails 2.3.5

Dans ce cas, vous devrez suivre les instructions à cet endroit.

Questions connexes