为什么Rails初始化失败?

时间:2012-11-28 12:51:26

标签: initialization ruby-on-rails-3.2 bundler

我正在使用Rails 3.2.9和Ruby 1.9.3-p327。

在我的服务器上部署“capistrano”后,我无法初始化我的Rails应用程序,因为它会导致错误导致Rails和Ruby解释器崩溃。

没有任何明确的错误消息我必须依赖回溯,控制帧和内存转储。所以很难调试并找出错误来自哪里。在这里张贴它太长了。

在部署期间,我不得不在我的 config / application.rb 文件中设置它,以使deploy:asset:precompile任务通过,否则我陷入了红宝石崩溃:< / p>

config.assets.initialize_on_precompile = false

部署之后,我刚刚运行了一个rake db:reset来测试从我的应用程序访问数据库,但是这会导致崩溃,所以我测试了从控制台访问我的数据库以及“new-Rails-app-direct-创建最服务器上”。一切都在这方面运作良好(创建数据库,并授予访问权限)。所以我排除了来自database.yml或postgres数据库设置的任何问题。

此外,经过一段很长的搜索(我在这个问题上花了整整一周),我设法找到了问题来自Rails Initialization。

更具体地说,我的config / application.rb中的这些行导致了Rails和Ruby的崩溃。

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

我尝试了两个选项,它们都使应用程序崩溃。我也试着评论它们,但其他东西使得Rails和Ruby在应用程序之后的某个地方崩溃.Rb读取了它。

我怀疑与bundler和gem资产管道有关的东西。 如果我运行 gem list 命令,我可以看到我的服务器上安装了多个版本的bundler:

bundler (1.2.1, 1.1.4, 1.1.3)

如果我运行一个rvm gemset列表,我看到默认的gemset正在使用中,并且没有其他任何内容:

gemset for ruby-1.9.3-p327 (found in /usr/local/rvm/ruby-1.9.3-p327
=> (default)
   global

我不知道如何确保Rake / Rails使用这个gemset和这个版本的ruby?

此外,如果我以root身份连接; 捆绑安装将导致以下错误:

ERROR: Gem bundler is not installed, run `gem install bundler` first

如果以用户身份连接,它将起作用。

请注意,rvm已在系统范围内安装“sudo”。

我的其他宝石由捆绑器管理并存储到: 的的/ var / WWW / OPF /共享/捆/红宝石/

我的Gemfile:

source 'https://rubygems.org'

gem 'rails', '~>3.2'
gem 'pg', '>= 0.14'
gem 'haml-rails', '~> 0.3'

group :developpement do
  gem 'rspec-rails', '>= 2.11'
  gem 'capistrano', '>= 2.12'
  gem 'faker', '>= 1.0'
  gem 'rvm-capistrano'
end

group :test do 
  gem 'rspec', '>= 2.11'
  gem 'webrat', '>= 0.7'
  gem 'spork-rails', '>= 3.2'
  gem 'factory_girl_rails', '>= 4.0'
end

group :assets do
  gem 'sass-rails',   '>= 3.2.3'
  gem 'coffee-rails', '>= 3.2.1'
  gem 'compass-rails', '>= 1.0'
  gem 'execjs'
  gem 'therubyracer', :platforms => :ruby
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
gem 'annotate'
gem 'excel_rails', '~> 0.3'
gem 'spreadsheet', '~> 0.7'
gem 'schema_plus', '~> 0.4'
gem 'ar-octopus', '~> 0.3'
gem 'squeel', '~> 1.0'
gem 'devise', '~> 2.1'
gem 'role_model'
gem 'declarative_authorization'
gem 'rails-translate-routes', '~> 0.1'

1 个答案:

答案 0 :(得分:1)

我最终找到了解决方案!

首先要知道PhusionPassenger正在显示的错误消息:

Passenger encountered the following error:
The application spawner server exited unexpectedly: Unexpected end-of-file detected.

Exception class:
    PhusionPassenger::Rack::ApplicationSpawner::Error

与宝石无关,但通常可能是here解释的情况。

您可以找到我的解决方案here