2016-05-29 15 views
1

私はSSHKit :: Runner :: ExecuteErrorを実行しているときに、リモートサーバにレポからRubyアプリケーションをプッシュしようとしています。ローカルrvm ruby​​インストールとリモートrbenv ruby​​インストール - それらは共存できますか?

$: bundle exec cap production deploy 

私は多くの時間のトラブルシューティング後

DEBUG [506a96fd] Running [ -d ~/.rvm ] as [email protected] 
DEBUG [506a96fd] Command: [ -d ~/.rvm ] 
DEBUG [506a96fd] Finished in 1.496 seconds with exit status 1 (failed). 
DEBUG [8e553e85] Running [ -d /usr/local/rvm ] as [email protected] 
DEBUG [8e553e85] Command: [ -d /usr/local/rvm ] 
DEBUG [8e553e85] Finished in 0.074 seconds with exit status 1 (failed). 
DEBUG [d6f82812] Running ~/.rvm/bin/rvm version as [email protected] 
DEBUG [d6f82812] Command: ~/.rvm/bin/rvm version 
DEBUG [d6f82812] bash: /home/deploy/.rvm/bin/rvm: No such file or directory 
(Backtrace restricted to imported tasks) 
cap aborted! 
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: rvm exit status: 127 
rvm stdout: Nothing written 
rvm stderr: bash: /home/deploy/.rvm/bin/rvm: No such file or directory 

SSHKit::Command::Failed: rvm exit status: 127 
rvm stdout: Nothing written 
rvm stderr: bash: /home/deploy/.rvm/bin/rvm: No such file or directory 

を取得し、私はそれは私のローカルマシン上のルビーをインストールするのが一般的だかどうかの質問に来たinterwebに同様のエラーメッセージを検索しますrvmで起動し、アプリケーションをrepoからrbenvでインストールされたリモートマシンにプッシュします。私の考えは、 "そのようなファイルやディレクトリはありません"というエラーは、自分のローカルインストールがローカルにインストールされていることに基づいて、リモートのrvmフォルダを探していることを意味し、

次のステップでは、rbenvを使用して同じRubyバージョンをローカルにインストールすることができましたが、rvmがrbenvと互換性がなく、rbenvを使用する前にrvmのすべてのトレースを削除する必要があります。どちらもローカルマシンにインストールされています。

ローカルでrvmをアンインストールしたり、関連するすべてのgemをアンインストールしなくても、この作業を行うためのハックはありますか?this answerで説明されているように手動でリモートにフォルダを作成しますか?正直なところ、これでもっともクリーンでベストプラクティスを探しています。事前に多くの感謝。

Gemfile

# Added per gorails.com tutuorial @ gorails.com/deploy/ubunt/14.04 
gem 'capistrano', '~> 3.4.0' 
gem 'capistrano-bundler', '~> 1.1.2' 
gem 'capistrano-rails', '~> 1.1.1' 

# Add this if you're using rbenv 
# gem 'capistrano-rbenv', github: "capistrano/rbenv" 

gem 'capistrano-rvm', github: "capistrano/rvm" 

Capfile

require 'capistrano/setup' 
require 'capistrano/deploy' 

require 'capistrano/bundler' 
require 'capistrano/rails' 

require 'capistrano/rvm' 

set :rvm_type, :user 
set :rvm_ruby_version, '2.0.0-p451' 

# Load custom tasks from `lib/capistrano/tasks` if you have any defined 
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r } 

設定/ deploy.rb

lock '3.4.1' 
set :application, 'my_app' 
set :repo_url, 'https://github.com/my_acct/my_app.git' 
set :deploy_to, '/home/deploy/#{my_app}' 

namespace :deploy do 
    after :restart, :clear_cache do 
    on roles(:web), in: :groups, limit: 3, wait: 10 do 
    end 
    end 
end 

設定/デプロイ/ production.rb

set :stage, :production 
server '168.257.12.345', user: 'deploy', roles: %w{web app} 

バージョン

ruby 2.3.1 (local and remote) 
rbenv version 2.1.5 
rvm 1.27.0 

答えて

1

私はあなたのセットアップが共通であるかどうかわかりませんが、それは可能なはずです。 Capistranoの目的のために、サーバ上でのみrvmまたはrbenvをローカルで使用しているのかどうかは気にしません。したがって、サーバーにrbenvがある場合は、capistrano-rvm gemではなく、capistrano-rbenv gemとCapfileの設定が必要です。

上記のエラーは、Capistranoがリモートサーバー上でRVMを検索しようとしているためです。 capistrano-rvm|rbenvの宝石が存在する理由は、Capistranoがインストールを実行するためにサーバーにSSH接続すると、自動構成をローカルに提供するbash拡張機能に自動的にアクセスすることができないためです。だからカピストラーノはこれを手動で設定しなければならない。

ローカルマシンでは、rvmとrbenvは互換性がなく、rbenvをインストールする前にrvmのすべてのトレースを削除する必要があります。逆も同様です。私はカプリストラノを理解し続ける前に、いずれかのローカルインストールが正しく設定されていることを確認したいと思います。

こちらがお役に立てば幸いです。

+0

ありがとうございます。外科的にrvmのあらゆる痕跡を見つけて除去するための "ls -a〜"をしましたか?自家製のrbenvを再ロードし、これを解決したと思った。突然、rake "db:migrate"の後にruby -vは私に2.1.5p273がインストールされていることを伝えます。なぜ、それが私をひどく運転しているのか分かりません。 rbenv install 2.3.1が正常にインストールされます。 rbenv global 2.3.1はそれをグローバルに設定します。私のアプリケーションフォルダから、rbenv local 2.3.1がローカルに設定されます。それでも、私がruby -vを実行すると、ruby 2.1.5p273が発生します。なぜこのようなことが起こったのか?バージョン2.1.5が隠れている可能性のある場所はありますか? Gemfileはrbenv gemを使用するようになりました。削除されたrvm gem。 –

+0

"type ruby​​"を実行すると、結果はどうなりますか? –

+0

"ルビーはハッシュされています(/Users/me/.rbenv/shims/ruby)"どのように再起動して歩き回ったのか分かりません。今戻ってきてruby -vがruby 2.3.1p112を生成するので、このバージョンが動作するかどうかを確認します。さて、しかし、取得「キャップは中止 とLoadErrorは:そのようなファイルをロードすることはできません - カピストラーノ/ rbenv!」キャップの生産展開しています。 –

関連する問題