我正在尝试部署rails应用程序,但它仍然存在错误
DEBUG[1a70ba92] Command: cd /home/deploy/myapp/releases/20140615090226 && ( PATH=$HOME/.rbenv /shims:$HOME/.rbenv/bin:$PATH RBENV_ROOT=~/.rbenv RBENV_VERSION=2.1.2 ~/.rbenv/bin/rbenv exec bundle install --binstubs /home/deploy/myapp/shared/bin --path /home/deploy/myapp/shared/bundle --without development test --deployment --quiet )
DEBUG[1a70ba92] rbenv: bundle: command not found
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host xxx.xxx.xxx.xx: bundle exit status: 127
bundle stdout: Nothing written
bundle stderr: rbenv: bundle: command not found
deploy.rb
# config valid only for Capistrano 3.1
lock '3.1.0'
set :application, 'myapp'
set :repo_url, 'git@bitbucket.org:username/myapp.git'
# Default branch is :master
# ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }
# Default deploy_to directory is /var/www/my_app
set :deploy_to, '/home/deploy/myapp'
# Default value for :scm is :git
# set :scm, :git
set :branch, "master"
# Default value for :format is :pretty
# set :format, :pretty
# Default value for :log_level is :debug
# set :log_level, :debug
# Default value for :pty is false
# set :pty, true
# Default value for :linked_files is []
set :linked_files, %w{config/database.yml}
# Default value for linked_dirs is []
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}
# Default value for default_env is {}
# set :default_env, { path: "/opt/ruby/bin:$PATH" }
set :default_env, { path: "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH" }
# Default value for keep_releases is 5
# set :keep_releases, 5
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 :publishing, :restart
end
desc "Symlink shared config files"
task :symlink_config_files do
run "#{ try_sudo } ln -s #{ deploy_to }/shared/config/database.yml #{ current_path }/config/database.yml"
end
end
capfile
# Load DSL and Setup Up Stages
require 'capistrano/setup'
# Includes default deployment tasks
require 'capistrano/deploy'
require 'capistrano/bundler'
require 'capistrano/rails'
require 'capistrano/rbenv'
set :rbenv_ruby, "2.1.2"
Production.rb
set :stage, :production
role :app, %w{deploy@xxx.xxx.xxx.xx}
role :web, %w{deploy@xxx.xxx.xxx.xx}
role :db, %w{deploy@xxx.xxx.xxx.xx}
set :password, ask('Server password', nil)
server 'xxx.xxx.xxx.xx', user: 'deploy', password: fetch(:password), roles: %w{web app}
/etc/nginx/nginx.conf
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /home/deploy/.rbenv/shims/ruby;
的/ etc / nginx的/ /默认启用位点-
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name mydomain.com;
passenger_enabled on;
rails_env production;
root /home/deploy/myapp/current/public;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
which ruby
/home/deploy/.rbenv/shims/ruby
ruby -v
ruby 2.1.2p95
它正在使用正确的红宝石版本。但我想尝试在另一个文件夹中安装宝石。我该如何修复它?
答案 0 :(得分:11)
您是否曾尝试在服务器上安装gem“bundler”?运行bundle命令需要此gem。 SSH到您的服务器并运行以下命令:
gem install bundler
希望有所帮助
答案 1 :(得分:3)
如果你已经安装了bundler(bundler -v)试一试(它在Ubuntu 12.04 LTS上适用于我):
1. gem uninstall bundler
2. gem update
3. gem install bundler
4. redeploy
答案 2 :(得分:3)
它对我有用。我正在使用Ubuntu 16.04.Change用户下面的用户名。
sudo pico /etc/profile.d/rbenv.sh
#File
export RBENV_ROOT=/home/user/.rbenv
export PATH=$RBENV_ROOT/shims:$RBENV_ROOT/bin:$PATH
#End File
答案 3 :(得分:2)
更新:
我找到原因:我的.gemrc包含" gem: - user-install",所以捆绑不能安装在rbenv中,然后rbenv无法在2.1.2路径中找到捆绑二进制文件
删除--user-install配置,然后重新安装bundle以解决问题。
===================================
我发现RBENV_VERSION env导致捆绑失败,但不知道为什么。
我删除了RBENV_VERSION并在服务器上执行了cmd,它成功了。
答案 4 :(得分:1)
如果查看您的.bashrc或.bash_profile,您将看到类似的内容:
case $- in
*i*) ;;
*) return;;
esac
或者:
[ -z "$PS1" ] && return
如果外壳不是交互式的,这将阻止执行此行之后的所有内容。
Capistrano无法打开交互式外壳。
例如,如果您使用的是rbenv ,它将在.bashrc的末尾添加行。 这些行未执行,因此未加载您的ruby环境。
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"
只需将rbenv行移到您的.bashrc开头,再返回上述返回值即可。