ruby-on-rails – Capistrano v3找不到Bundler

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Capistrano v3找不到Bundler前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在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'

将这些行添加到deploy.rb文件中.

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.它会照顾你的红宝石和捆绑的路径.

bundle install doesn’t work from capistrano

猜你在找的Ruby相关文章