大家好我将rails应用程序部署到生产服务器时遇到问题。实际上我已通过bundle
在服务器中安装了gem install bundler
。不幸的是,当我输入cap production deploy
时,它变成了这样:
** [out :: server url] bash: bundle: command not found
command finished in 772ms
*** [deploy:update_code] rolling back
* executing "rm -rf /home/deployer/crawler/releases/20180326063414; true"
servers: ["server url"]
[server url] executing command
command finished in 833ms
failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'ruby-2.2.1' -c 'cd /home/deployer/crawler/releases/20180326063414 && bundle install --gemfile /home/deployer/crawler/releases/20180326063414/Gemfile --path /home/deployer/crawler/shared/bundle --deployment --quiet --without development test'" on server url
它说bash: bundle: command not found
。我键入bundle --version
输出为:
Bundler版本1.16.1
这是我的宝石文件
group :development do
gem 'capistrano', '~>2.15.4'
gem 'rvm-capistrano', '1.4.1', require: false
gem 'invoker'
gem 'regularity', require: nil
gem 'pry-rails'
end
这是我的deploy.rb:
require "bundler/capistrano"
require "rvm/capistrano"
require 'capistrano/ext/multistage'
require 'rollbar/capistrano'
#set :rollbar_token, '3dc5b293a0c74c3e8b98ab26f07bea74'
set :rollbar_token, 'de21e333f1d5469ea521c2ef3a29bd3d'
set :application, "crawler"
# set :repository, "git@bitbucket.org:terbang-ventures/linkedin-scraper.git"
set :repository, "git@bitbucket.org:terbang-ventures/linkedin-scraper.git"
set :rails_env, "production"
set :branch, "master"
set :scm, :git
set :default_shell, '/bin/bash -l'
# set :whenever_environment, defer { stage }
# require "whenever/capistrano"
set :stages, %w(production staging)
set :user, 'deployer'
set :rvm_type, :user
set :rvm_ruby_string, 'ruby-2.2.1'
set :rvm_binary, '~/.rvm/bin/rvm'
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
set :deploy_to, "/home/#{user}/#{application}"
set :use_sudo, false
set :deploy_via, :remote_cache
default_run_options[:pty] = true
ssh_options[:forward_agent] = true
namespace :deploy do
desc 'Load environment variables'
task :load_env_vars do
run "ln -s /home/#{user}/env.yml #{current_release}/config/env.yml"
end
desc "Migrate DB1"
task :migrate_db1 do
# rake db:migrate_db1 RAILS_ENV=staging
run "cd #{current_path} && bundle exec rake db:migrate_db1 RAILS_ENV=#{rails_env}"
end
desc 'Re-establish mongoid.yml'
task :set_database_symlink do
run "ln -s /home/#{user}/mongoid.yml #{current_release}/config/mongoid.yml"
end
desc 'Re-establish database.yml'
task :set_database_symlink_active_record do
run "ln -s /home/#{user}/database.yml #{current_release}/config/database.yml"
end
desc 'run bundle install'
task :install_bundle do
run "cd #{current_path} && bundle install"
end
task :restart, :roles => :app, :except => { :no_release => true } do
run "ps axf | grep puma | grep -v grep | awk '{print \"kill -9 \" $1}' | sh"
run "cd #{current_path} && bundle exec puma -e #{rails_env} -p 9292 -d"
run "cd #{current_path} && bundle exec puma -e #{rails_env} -p 9293 -d"
end
task :stop, :roles => :app, :except => { :no_release => true } do
run "ps axf | grep puma | grep -v grep | awk '{print \"kill -9 \" $1}' | sh"
end
task :start, :roles => :app, :except => { :no_release => true } do
run "cd #{current_path} && bundle exec puma -e #{rails_env} -p 9292 -d"
run "cd #{current_path} && bundle exec puma -e #{rails_env} -p 9293 -d"
end
end
namespace :searchkick do
# reindex
namespace :reindex do
# Reindex Contact
task :contact, except: {no_release: true} do
run "cd #{current_path} && bundle exec rake searchkick:reindex CLASS=Contact RAILS_ENV=#{rails_env}"
end
# Reindex Contact
task :company, except: {no_release: true} do
run "cd #{current_path} && bundle exec rake searchkick:reindex CLASS=Company RAILS_ENV=#{rails_env}"
end
task :user, except: {no_release: true} do
run "cd #{current_path} && bundle exec rake searchkick:reindex CLASS=User RAILS_ENV=#{rails_env}"
end
task :all, except: {no_release: true} do
run "cd #{current_path} && bundle exec rake searchkick:reindex:all RAILS_ENV=#{rails_env}"
end
end
end
namespace :importer do
task :department, roles: :app, except: {no_release: true} do
run "cd #{current_path} && bundle exec rake importer:import_department RAILS_ENV=#{rails_env}"
end
task :staff_level, roles: :app, except: {no_release: true} do
run "cd #{current_path} && bundle exec rake importer:import_staff_level RAILS_ENV=#{rails_env}"
end
task :email_format, roles: :app, except: {no_release: true} do
run "cd #{current_path} && bundle exec rake importer:import_email_format RAILS_ENV=#{rails_env}"
end
task :combined_emails, roles: :app, except: {no_release: true} do
run "cd #{current_path} && bundle exec rake importer:import_combined_emails RAILS_ENV=#{rails_env}"
end
task :late_address, roles: :app, except: {no_release: true} do
run "cd #{current_path} && bundle exec rake importer:import_late_address RAILS_ENV=#{rails_env}"
end
end
namespace :rails do
desc "Remote console"
task :console, roles: :app, except: { no_release: true } do
run_interactively "bundle exec rails c -e #{rails_env}"
end
desc "Remote dbconsole"
task :dbconsole, roles: :app, except: { no_release: true } do
run_interactively "bundle exec rails dbconsole -e #{rails_env}"
end
# Short aliases
task :c, roles: :app do
console
end
task :dbc, roles: :app do
dbconsole
end
desc "Monitor log"
task :log, roles: :app, except: { no_release: true } do
run_interactively "tail -f log/#{rails_env}.log"
end
def run_interactively(command)
server ||= find_servers_for_task(current_task).first
puts " running `#{command}` as #{user}@#{server}"
exec %Q(ssh #{user}@#{server} -t "bash --login -c 'cd #{current_path} && #{command}'")
end
end
after "deploy", "deploy:cleanup"
after "deploy", "deploy:migrate"
after "deploy:migrate", "deploy:migrate_db1"
after "deploy:start", "sidekiq:start"
after "deploy", "sidekiq:restart"
before "deploy:assets:precompile", "deploy:load_env_vars"
before "deploy:assets:precompile", "deploy:set_database_symlink"
before "deploy:assets:precompile", "deploy:set_database_symlink_active_record"
before "deploy:assets:precompile", "deploy:assets:clean"
before "deploy:migrate", "deploy:install_bundle"
我的问题是,为什么capistrano仍然要求bundle
命令找不到,如果我在rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'ruby-2.2.1' -c 'cd /home/deployer/crawler/releases/20180326065919 && bundle install --gemfile /home/deployer/crawler/releases/20180326065919/Gemfile --path /home/deployer/crawler/shared/bundle --deployment --quiet --without development test'
中找不到它?