5

Capistrano を使用してサーバーに最初のアプリをデプロイしようとしていますが、gemset と ruby​​ バージョンの管理で少し迷っています。

これらは私の(サーバーとワークステーション)バージョンです:

  • レール 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 を確認すると、 1.9.1という名前のフォルダーと/var/www/opf/shared/bundle/ruby/1.9.1/gems/ が見つかります。必要なすべての宝石 (Gemfile で指定) を好きにできます。rubyのバージョンに問題があるのは確かなのですが、どうすれば解決できますか?

現在、rake コマンドを実行すると、db にアクセスしようとして 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

多くの宝石が欠落しているため、検証されていない宝石の依存関係がいくつかあるに違いないと思います.1.9.3を期待しているにもかかわらず、互換性のないルビーバージョン1.9.1を使用している可能性があります.

問題は ruby​​ のバージョンと gem の管理にあると思います。私は確かにgemsetとカピストラーノの展開を組み合わせています。

経験と情報が不足しています。サーバーでこれを処理する方法を教えてもらえますか? ベストプラクティスは何ですか?

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

助けてくれてありがとう

4

2 に答える 2

4

gem はインストールされますが、bundler のコンテキストでインストールされます。

bundle exec gem list

これは、バンドラーが設定を保存し.bundle/config、共有 gem をインストールしなかったためです。代わりに、すべての gem がプロジェクトごとに別のディレクトリにインストールされ、インプレース gemset として扱われます。

于 2012-11-13T22:58:10.747 に答える
1

この投稿は、 gem を管理する 2 つの可能性を理解するのに役立ちました。

于 2012-11-14T20:44:03.910 に答える