2008-10-22 4 views
4

Итак, у меня есть приложение Rails, настроенное на DreamHost, и у меня он работал некоторое время назад, и теперь он сломан. Я не очень много знаю о средах развертывания или что-то в этом роде, поэтому, пожалуйста, простите мое невежество. Во всяком случае, это выглядит как приложение сбой в этой строке в конфигурационном/environment.rb:Почему эта линия ломает Rails с Пассажиром на DreamHost?

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

конфигурации/boot.rb довольно много нормально, но я включу его здесь в любом случае.

# 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! 

У кого-нибудь есть идеи? Я не получаю никаких ошибок в журнале или на странице.

-fREW

+0

Как он падает? У вас есть сообщение об ошибке? У вас есть Rails, зависающий в поставщике? – Ivan

ответ

1

Мое предположение было бы, что вы нарушаете из-за новой версии драгоценных камней Rails на Dreamhost. По крайней мере, это была моя проблема, когда все взорвалось чем-то вроде boot.rb.

Попробуйте заморозить драгоценные камни из среды разработки в каталог вашего поставщика/рельсов.

3

У меня была та же проблема на DreamHost. Замороженные рельсы и распаковка всех драгоценных камней заставили меня пройти мимо него.

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

Ya - проблема на самом деле не в boot.rb - это просто, что boot.rb где рельсы фактически загружен.

Таким образом, вы получите сообщение об ошибке, если вы указали версию Rails, которая просто не существует на вашем Dreamhost slice. Это может произойти, если вы либо обновляете свой проект, запускаете новый проект (и забываете, что вы обновили рельсы в то время), либо если вы все еще используете старую версию рельсов, и теперь она была удалена с сервера dreamhost, на.

Для того, чтобы выяснить, что есть, смотреть в config/environment.rb строку, которая будет читать что-то вроде:

RAILS_GEM_VERSION = '2.3.4' unless defined? RAILS_GEM_VERSION 

Затем SSH к вашему Dreamhost сервер и введите gem list и посмотреть, если ваша версия находится в списке.

Если нет, попробуйте несколько вариантов. Допустим, что версия, которую вы используете, - 2.3.4. Для начала попробуйте: gem install rails -v=2.3.4, затем перезапустите. Это может быть все, что требуется. Если это не сработает, попробуйте заморозить и распаковать драгоценные камни (в соответствии с другим ответом здесь).

Существует еще одна возможность - вы на самом деле не получаете драгоценный камень, от которого зависит рельсы, но который терпит неудачу - например, зависимость от определенной версии стойки поймала меня однажды. Но вы также можете иметь другие зависимости от драгоценных камней.

Если вы запустите rake gems, вы сможете перечислить все драгоценности, которые ваш проект знает о том, что им нужно - убедитесь, что они установлены для начала.

Затем, как некое грубое испытание дыма, попробуйте запустить script/console - если вам не хватает важного жгута для рельсов, script/console не загружается и не сработает, предоставив вам уведомление о драгоценном камне, в котором вы нуждаетесь.

Обновление: Если вы пытаетесь запустить v 2.3.5, вы также можете столкнуться с этой проблемой: Bypassing rack version error using Rails 2.3.5

В этом случае вам нужно будет следовать инструкциям.