1

我正在使用带有 Ruby 1.9.3-p327 的 Rails 3.2.9。

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

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

在部署期间,我必须在我的config/application.rb文件中进行设置,以使 deploy:asset:precompile 任务通过,否则我会陷入 ruby​​ 崩溃:

config.assets.initialize_on_precompile = false

部署后,我只运行了一个 rake db:reset 来测试从我的应用程序对数据库的访问,但这会导致崩溃,所以我测试了从控制台和“newly-Rails-app-directly-created-on”对我的数据库的访问-服务器”。这方面一切正常(创建数据库,并授予访问权限)。所以我排除了来自 database.yml 或 postgres 数据库设置的任何问题。

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

更具体地说,我的 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 读取 application.rb 之后,其他一些东西也会使 Rails 和 Ruby 崩溃。

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

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 身份连接;bundle install将导致以下错误:

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

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

请注意,rvm 已使用“sudo”作为系统范围安装。

我的其他 gem 由 bundler 管理并存储到: /var/www/opf/shared/bundle/ruby/

我的宝石文件:

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'
4

1 回答 1

1

我终于找到了解决方案!

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

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

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

与宝石无关,但通常情况下可能如此处所述

你可以在这里找到我的解决方案。

于 2013-03-27T10:57:04.800 回答