Ubuntu上的Rails3.2+Passenger3+Apache2+RVM

Posted

技术标签:

【中文标题】Ubuntu上的Rails3.2+Passenger3+Apache2+RVM【英文标题】:Rails3.2+Passenger3+Apache2+RVM on Ubuntu 【发布时间】:2012-05-28 18:36:00 【问题描述】:

我正在努力让乘客+rvm+apache+rails 正常工作。打开页面时,我从乘客那里收到以下错误消息:


Ruby (Rack) 应用程序无法启动 这些是可能的原因: 应用程序代码中可能存在语法错误。请检查此类错误并修复它们。 可能未安装所需的库。请安装此应用程序所需的所有库。 应用程序可能未正确配置。请检查所有配置文件是否正确写入,修复任何不正确的配置,然后重新启动该应用程序。 应用程序依赖的服务(例如数据库服务器或 Ferret 搜索引擎服务器)可能尚未启动。请启动该服务。 有关错误的更多信息可能已写入应用程序的日志文件。请检查它以便分析问题。 错误信息: 未初始化的常量 Capistrano 异常类: 名称错误 应用程序根: /var/www/www.pixtur.org/rails/current 回溯: 文件行位置 0 /var/www/www.------------.----/rails/shared/bundle/ruby/1.9.1/gems/rvm-capistrano-1.2.0/lib/ rvm/capistrano.rb 3 in `' 1 /home/pixtur/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.1.3/lib/bundler/runtime.rb 74 在“要求” 2 /home/pixtur/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.1.3/lib/bundler/runtime.rb 74 在“rescue in block in require” 3 /home/pixtur/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.1.3/lib/bundler/runtime.rb 62 在`block in require' 4 /home/pixtur/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.1.3/lib/bundler/runtime.rb 55 在“每个” 5 /home/pixtur/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.1.3/lib/bundler/runtime.rb 55 在“要求” 6 /home/pixtur/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.1.3/lib/bundler.rb 119 在“要求”

我不明白,这个错误消息想告诉我什么。令人困惑的是,它似乎指的是 ruby​​-1.9.1,而 rvm 应该映射到 1.9.2-p180。

欢迎任何帮助、指示或后续步骤来找到我们的更多信息。

$GEM_PATH

在远程机器上使用 ssh: $回声 $GEM_PATH /home/pixtur/.rvm/gems/ruby-1.9.2-p180@pixtur-org:/home/pixtur/.rvm/gems/ruby-1.9.2-p180@global

当前 deploy.rb

require "bundler/capistrano"

set :rvm_ruby_string, ENV['GEM_HOME'].gsub(/.*\//,"") # Read from local system

# Load RVM's capistrano plugin:
require "rvm/capistrano"

set :user, 'pixtur'
set :domain, 'www.--------------.com'
set :applicationdir, "/var/www/www.somedomain.com/rails"

set :scm, 'git'
set :repository,  "gitosis@------------------.git"
#set :git_enable_submodules, 1 # if you have vendored rails
set :branch, 'master'
set :git_shallow_clone, 1
set :scm_verbose, true

set :deploy_to, applicationdir
set :use_sudo, false

#set :scm, :git
role :app, domain
role :web, domain
role :db,  domain, :primary => true

# additional settings
default_run_options[:pty] = true  # Forgo errors when deploying from windows

namespace :deploy do
  task :start, :roles => :app do
    run "touch #current_release/tmp/restart.txt"
  end

  task :stop, :roles => :app do
  end

  task :restart, :roles => :app do
    run "#try_sudo touch #File.join(current_path,'tmp','restart.txt')"
  end

  desc "Install bundler"
  task :bundle_install do
    begin
      run "bundle install"
    rescue
      gem_install_bundler
    end
  end  

end

.bundle/配置

---
BUNDLE_FROZEN: '1'
BUNDLE_PATH: /var/www/www.----------.---/rails/shared/bundle
BUNDLE_DISABLE_SHARED_GEMS: '1'
BUNDLE_WITHOUT: development:test

.rvmrc

if [[ -s "/Users/pixtur/.rvm/environments/ruby-1.9.2-p180@pixtur-org" ]] ; then
  . "/Users/pixtur/.rvm/environments/ruby-1.9.2-p180@pixtur-org"
else
  rvm --create use  "ruby-1.9.2-p180@pixtur-org"

【问题讨论】:

您的 $GEM_PATH 设置是否正确?您是否在 Gemfile 中指定了特定的 Capistrano 路径? 日志文件管理器中还有更多信息吗?你的deploy.rb 看起来怎么样?也许你以某种方式混淆了捆绑目录 您的应用根目录中是否还有.bundle 目录?如果是这样,.bundle/config 的外观如何? @Samy:我检查了本地路径并编辑了原始问题。有趣的是,在接受本地 .rvmrc 尝试“cap shell”时出现错误:/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:827:in `report_activate_error ': 找不到 RubyGem capistrano (>= 0) (Gem::LoadError) @Matthias:是的,.bundle 存在。我添加了上面两个文件的内容。 【参考方案1】:

问题来自您的 Gemfile,

1) 您需要将gem 'rvm-capistrano' 移动到开发组 - 这样它就不会安装到shared/bundle

2) 你有没有机会使用gem 'rvm-capistrano', :lib => 'rvm/capistrano',lib 部分不是必需的,实际上很可能它会破坏东西。

在再次部署之前,您应该清除服务器上的shared/bundle

【讨论】:

非常感谢。这解决了我的问题。我已经有一年没有做 rails 了,仍然不明白为什么将 rvm-capistrano 安装为共享 gem 会造成伤害,但实际上,我真的不想知道 :-)

以上是关于Ubuntu上的Rails3.2+Passenger3+Apache2+RVM的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法构建 gem 本机扩展(rails 3.2.3 上的 mysql2)

Rails 在应用程序 ubuntu 中与 Postgresql 数据库连接

Rails3 中的 Paypal Express 结帐

如何加快rails3.2中的活动记录?我的活动记录查询时间超过 3 分钟

为啥 Rails 找不到我的资产?

Rails 3.2 显示动作的模态弹出窗口