我正在尝试使用 Capistrano 在服务器上部署我的第一个应用程序,但我对管理 gemsets 和 ruby 版本有点迷茫。
这些是我的(服务器和工作站)版本:
- 导轨 3.2.8
- RVM 1.16.17
- 宝石 1.8.24
- 捆绑器 1.2.1
- pg 宝石 0.14.1
我的宝石是:
ruby-1.9.3-p194 的 Gemsets(在 /usr/local/rvm/gems/ruby-1.9.3-p194 中找到)
- (默认)
- 全球的
- => rail3dev20120606
我将默认 gemset 设置为:
rvm use 1.9.3-p194@rail3dev20120606 --default --passenger
当我运行:
cap bundle:install
任务以成功结束,但是当我执行以下操作时:
gem list
尽管我的 Gemfile 中存在许多缺失的宝石。当我在/var/www/opf/shared/bundle/ruby/中检查我的 gem 时,我在 /var/www/opf/shared/bundle/ruby/1.9.1/gems/ 中找到一个名为1.9.1的文件夹我可以喜欢所有我需要的宝石(在 Gemfile 中指定)。我确定 ruby 版本有问题,但我该如何解决呢?
目前,如果我执行任何 rake 命令,我会遇到 ruby 崩溃 [Bug] 分段错误,因为它尝试访问数据库并使用 postgresql_adapter :
/var/www/opf/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:1213: [BUG] Segmentation fault
我认为由于缺少许多 gem,因此必须有一些未验证的 gem 依赖项,并且可能一个 gem 使用的是不兼容的 ruby 版本 1.9.1,尽管它期望使用 1.9.3。
我认为问题在于管理 ruby 版本和 gems。我肯定会与 gemset 和我的 capistrano 部署进行一些混合。
我缺少经验和信息。有人可以告诉我如何在服务器上处理这个问题吗?最佳做法是什么?
我想如何更新我的 ruby 版本?使用 Capistrano deploy.rb 吗?手动?有/没有 rvm ?我看到一个新版本的ruby 1.9.3-p327 刚刚发布。
我应该使用 gemset 吗?我的 deploy.rb 中的 :rvm_ruby_string 怎么样。拼写正确还是应该删除 p194 部分?我应该删除 :rvm_ruby_string 吗?留着它 ?使用 .rvmrc 文件 ???
我真的迷路了,欢迎提供一些帮助。
无论如何,这是我的 config/deploy.rb :
require 'bundler/capistrano'
require File.join(File.dirname(__FILE__), 'deploy') + '/capistrano_database'
set :rvm_type, :system
set :rvm_ruby_string, 'ruby-1.9.3-p194@rail3dev20120606'
require 'rvm/capistrano'
set :application, 'opf'
set :deploy_to, '/var/www/opf'
set :rails_env, 'production'
set :user, 'the_user'
set :use_sudo, false
set :group_writable, false
set :scm, :git
set :repository, 'git@github.com:user/opf.git'
set :branch, 'master'
default_run_options[:pty] = true
set :deploy_via, :remote_cache
server '192.168.5.200', :web, :app, :db, :primary => true
# If you are using Passenger mod_rails uncomment this:
namespace :deploy do
task :start do ; end
task :stop do ; end
task :restart, :roles => :app, :except => { :no_release => true } do
run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
end
end
谢谢你的帮助