I have a problem in deploying my App with Capistrano v3. When I run '$ cap production deploy' I see an error...
我在部署Capistrano v3时遇到了一个问题。当我运行“$ cap生产部署”时,我看到一个错误……
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
But when I run the last 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 )
... via ssh on my server I don't see any errors.
…通过我的服务器上的ssh,我没有看到任何错误。
Here is my server's environment:
以下是我的服务器环境:
- Ubuntu 13.04
- Ubuntu 13.04
- rvm 1.23.5
- rvm 1.23.5
- rubygems 1.8.25
- rubygems 1.8.25
- Bundler 1.3.5
- 打包机1.3.5
- ruby 1.9.3p448
- ruby 1.9.3p448
- capistrano (3.0.0)
- capistrano(3.0.0)
- capistrano-bundler (1.0.0)
- capistrano-bundler(1.0.0)
- capistrano-rails (1.0.0)
- capistrano-rails(1.0.0)
Here is a piece of my Gemfile which includes capistrano's gems
这是我的宝石文件的一部分,包括卡皮斯特拉诺的宝石
...
group :development do
...
# Deploy with Capistrano
gem 'capistrano', '~> 3.0.0'
gem 'capistrano-rails'
gem 'capistrano-bundler'
end
...
Please see below capistrano's configuration:
请看以下capistrano的配置:
Capfile
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 }
config/deploy.rb
配置/ 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
config/deploy/production.rb
配置/部署/ 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)
Please help me.
请帮助我。
SOLVED
解决了
I've solved my problem by following steps:
我通过以下步骤解决了我的问题:
Add capistrano-rvm into Gemfile and do
将capistrand -rvm添加到Gemfile中并执行
...
group :development do
...
gem 'capistrano', '~> 3.0.0'
gem 'capistrano-rails'
gem 'capistrano-bundler'
gem 'capistrano-rvm'
end
...
Add this line into Capfile
将这一行添加到Capfile中
require 'capistrano/rvm'
Add these lines into the deploy.rb file.
将这些行添加到部署中。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"
3 个解决方案
#1
7
It seems that you had to add capistrano-rvm
. It will take care about your ruby and bundler paths.
看来你得加上capistrand -rvm。它将关心您的ruby和bundler路径。
bundle install doesn't work from capistrano
bundle安装不能从capistrano工作。
#2
0
... via ssh on my server I don't see any errors.
…通过我的服务器上的ssh,我没有看到任何错误。
The problem you are seeing is probably due to missing rbenv, chruby, or rvm. This is a really common one and it's documented here how to resolve, verify and/or work around (whichever works for your case) here:
您看到的问题可能是由于缺少rbenv、chruby或rvm。这是一个非常常见的问题,这里有关于如何解决、验证和/或在这里工作的文档(无论您的情况如何):
- http://www.capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/
- http://www.capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/
#3
0
If you use system rvm (path = /usr/local/rvm/bin/rvm), set capistrano-bundler as below
如果您使用系统rvm (path = /usr/local/rvm/bin/rvm),请将capistrand -bundler设置为如下所示
set :rvm_type, :system
set :rvm_ruby_version, 'ruby-<version>@<gemset>'
#1
7
It seems that you had to add capistrano-rvm
. It will take care about your ruby and bundler paths.
看来你得加上capistrand -rvm。它将关心您的ruby和bundler路径。
bundle install doesn't work from capistrano
bundle安装不能从capistrano工作。
#2
0
... via ssh on my server I don't see any errors.
…通过我的服务器上的ssh,我没有看到任何错误。
The problem you are seeing is probably due to missing rbenv, chruby, or rvm. This is a really common one and it's documented here how to resolve, verify and/or work around (whichever works for your case) here:
您看到的问题可能是由于缺少rbenv、chruby或rvm。这是一个非常常见的问题,这里有关于如何解决、验证和/或在这里工作的文档(无论您的情况如何):
- http://www.capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/
- http://www.capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/
#3
0
If you use system rvm (path = /usr/local/rvm/bin/rvm), set capistrano-bundler as below
如果您使用系统rvm (path = /usr/local/rvm/bin/rvm),请将capistrand -bundler设置为如下所示
set :rvm_type, :system
set :rvm_ruby_version, 'ruby-<version>@<gemset>'