2008-10-22 50 views
4

好的,所以我在DreamHost上建立了一個Rails應用程序,並且我在一段時間之前就開始工作,現在它已經壞掉了。我對部署環境或類似的東西瞭解不多,所以請原諒我的無知。無論如何,它看起來像應用程序在這一行到config/environment.rb崩潰:這條線爲什麼在DreamHost上打破Rails with Passenger?

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 2008-10-22 17:50:25

回答

1

我的猜測是,你的因爲Dreamhost的Rails的寶石的新版本打破。至少,這是我的問題,當事情已經爆炸,像boot.rb.

嘗試將您的開發環境中的寶石凍結到您的供應商/ rails目錄中。

3

我在DreamHost上遇到了同樣的問題。凍結鐵軌和解開所有寶石讓我過去了。

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

雅 - 這個問題是不是真的在boot.rb - 它只是boot.rb就是Rails是實際加載。

因此,如果您指定了您的dreamhost分區上不存在的Rails版本,則會出現類似這樣的錯誤。如果您升級項目,開始一個新項目(並忘記您同時升級了導軌),或者您仍在使用舊版本的導軌,並且它現在已從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

在這種情況下,你需要按照指示。