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 数据库连接