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