【问题标题】:bundler/capistrano is not installing gems with correct ruby versionbundler/capistrano 没有安装正确的 ruby​​ 版本的 gem
【发布时间】:2012-11-13 14:42:49
【问题描述】:

我正在尝试使用 Capistrano 在服务器上部署我的第一个应用程序,但我有点对管理 gemsets 和 ruby​​ 版本感到迷茫

这些是我的(服务器和工作站)版本:

  • Rails 3.2.8
  • RVM 1.16.17
  • 宝石 1.8.24
  • 捆绑器 1.2.1
  • pg gem 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/ 中找到了一个名为 1.9.1 的文件夹opf/shared/bundle/ruby/1.9.1/gems/ 我可以喜欢所有我需要的宝石(在 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​​ 版本和 gem。我肯定会与 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

感谢您的帮助

【问题讨论】:

    标签: gem ruby-on-rails-3.2 rvm capistrano


    【解决方案1】:

    gems 已安装,但它们是在 bundler 的上下文中安装的:

    bundle exec gem list
    

    这是因为 bundler 将其设置存储在 .bundle/config 中并且没有安装共享 gem,而是将所有 gem 安装在每个项目的单独目录中,将其视为就地 gemset。

    【讨论】:

    • 感谢您的回答。知道为什么我会收到此错误:/var/www/opf/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapter/postgresql_adapter.rb:1213: [BUG] Segmentation过错。以及为什么该文件夹被称为 ruby​​/1.9.1。是使用 ruby​​ 1.9.1 代替 1.9.3 吗?
    • 1.9.1 是所有 1.9.x rubies 的兼容级别,至于 BUG - 这是一个新问题
    • 对不起,我不明白你的第一个答案。如何使用我的宝石?我不希望宝石保存在我的应用程序文件夹中。这没有任何意义,因为 gemset 是用来管理 gems 的。
    • 您使用的是require 'bundler/capistrano',请参阅gembundler.com 了解gem 安装位置的配置。
    【解决方案2】:

    post 帮助我了解了管理 gem 的两种可能性:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 2015-03-03
      相关资源
      最近更新 更多