我在Capistrano v3部署我的应用程序时遇到问题.当我运行’$cap production deploy’时,我看到一个错误…
INFO [825ad68d] Running /usr/bin/env bundle --gemfile /home/username/www/myapp/releases/20131026181031/Gemfile --path /home/username/www/myapp/shared/bundle --deployment --quiet --binstubs /home/username/www/myapp/shared/bin --without development test on myhostname.com DEBUG [825ad68d] Command: cd /home/username/www/myapp/releases/20131026181031 && ( RAILS_ENV=production /usr/bin/env bundle --gemfile /home/username/www/myapp/releases/20131026181031/Gemfile --path /home/username/www/myapp/shared/bundle --deployment --quiet --binstubs /home/username/www/myapp/shared/bin --without development test ) DEBUG [825ad68d] /usr/bin/env: DEBUG [825ad68d] bundle DEBUG [825ad68d] : No such file or directory
但是当我运行最后一个命令…
cd /home/username/www/myapp/releases/20131026181031 && ( RAILS_ENV=production /usr/bin/env bundle --gemfile /home/username/www/myapp/releases/20131026181031/Gemfile --path /home/username/www/myapp/shared/bundle --deployment --quiet --binstubs /home/username/www/myapp/shared/bin --without development test )
…通过ssh在我的服务器上我没有看到任何错误.
这是我的服务器的环境:
> Ubuntu 13.04
> rvm 1.23.5
红宝石1.8.25
Bundler 1.3.5
> ruby 1.9.3p448
> capistrano(3.0.0)
> capistrano-bundler(1.0.0)
> capistrano-rails(1.0.0)
这是我的一个Gemfile,其中包括capistrano的宝石
... group :development do ... # Deploy with Capistrano gem 'capistrano','~> 3.0.0' gem 'capistrano-rails' gem 'capistrano-bundler' end ...
请参阅capistrano的配置:
Capfile
require 'capistrano/setup' require 'capistrano/deploy' require 'capistrano/bundler' require 'capistrano/rails/assets' require 'capistrano/rails/migrations' Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
配置/ deploy.rb
set :application,'myapp' set :repo_url,"/home/username/repository/#{fetch(:application)}.git" set :deploy_to,"/home/usename/www/#{fetch(:application)}" set :scm,:git set :branch,"master" set :format,:pretty set :use_sudo,false set :linked_files,%w{config/database.yml} set :linked_dirs,%w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system} set :keep_releases,5 SSHKit.config.command_map[:rake] = "bundle exec rake" SSHKit.config.command_map[:rails] = "bundle exec rails" namespace :deploy do desc 'Restart application' task :restart do on roles(:app),in: :sequence,wait: 5 do # Your restart mechanism here,for example: # execute :touch,release_path.join('tmp/restart.txt') end end after :restart,:clear_cache do on roles(:web),in: :groups,limit: 3,wait: 10 do # Here we can do anything such as: # within release_path do # execute :rake,'cache:clear' # end end end after :finishing,'deploy:cleanup' end
配置/部署/ production.rb
set :stage,:production set :bundle_gemfile,-> { release_path.join('Gemfile') } set :bundle_dir,-> { shared_path.join('bundle') } set :bundle_flags,'--deployment --quiet' set :bundle_without,%w{development test}.join(' ') set :bundle_binstubs,-> { shared_path.join('bin') } set :bundle_roles,:all role :app,%w{myhostname.com} role :web,%w{myhostname.com} role :db,%w{myhostname.com} server 'myhostname.com',user: 'username',roles: %w{web app},my_property: :my_value fetch(:default_env).merge!(rails_env: :production)
请帮帮我.
解决了
我通过以下步骤解决了我的问题:
将capistrano-rvm添加到Gemfile中
... group :development do ... gem 'capistrano','~> 3.0.0' gem 'capistrano-rails' gem 'capistrano-bundler' gem 'capistrano-rvm' end ...
将此行添加到Capfile中
require 'capistrano/rvm'
set :rvm_ruby_version,'1.9.3-p448' set :default_env,{ rvm_bin_path: '~/.rvm/bin' } SSHKit.config.command_map[:rake] = "#{fetch(:default_env)[:rvm_bin_path]}/rvm ruby-#{fetch(:rvm_ruby_version)} do bundle exec rake"
解决方法
看来你必须添加capistrano-rvm.它会照顾你的红宝石和捆绑的路径.