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
助けてくれてありがとう