【问题标题】:Rails Capistrano rbenv Puma bundle: Command not foundRails Capistrano rbenv Puma 包:找不到命令
【发布时间】:2018-09-12 05:16:26
【问题描述】:

我正在尝试将 cap staging deploy 运行到 AWS 实例,这是我们的暂存服务器。一切正常,包括捆绑安装......但是当它运行 Puma 服务器时它失败了:

Command: cd /home/ubuntu/medcordance/current && ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.5.0" RACK_ENV="staging" ; bundle exec puma -C /home/ubuntu/app_name/shared/puma.rb --daemon )

 DEBUG [02658949]   bash: bundle: command not found

我已经检查了高低以寻找解决方案。我找不到一个。我运行了 gem install bundler,确认安装了 bundler,我已经为 Capistrano 配置了我知道应该工作的所有设置,但我仍然找不到解决方案。

Capfile:

# Load DSL and set up stages
require "capistrano/setup"

# Include default deployment tasks
require "capistrano/deploy"

# Load the SCM plugin appropriate to your project:
#
# require "capistrano/scm/hg"
# install_plugin Capistrano::SCM::Hg
# or
# require "capistrano/scm/svn"
# install_plugin Capistrano::SCM::Svn
# or
require "capistrano/scm/git"
install_plugin Capistrano::SCM::Git

# Include tasks from other gems included in your Gemfile
#
# For documentation on these, see for example:
#
#   https://github.com/capistrano/rvm
#   https://github.com/capistrano/rbenv
#   https://github.com/capistrano/chruby
#   https://github.com/capistrano/bundler
#   https://github.com/capistrano/rails
#   https://github.com/capistrano/passenger
#
require 'capistrano/rails'
# require "capistrano/rvm"
require "capistrano/rbenv"
require "capistrano/bundler"
# require "capistrano/chruby"
require "capistrano/rails/assets"
require "capistrano/rails/migrations"

require "capistrano/puma"
install_plugin Capistrano::Puma  # Default puma tasks

# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }

部署:

lock "~> 3.10.1"

set :application, "app_name"
set :repo_url, "my bitbucket"
set :branch, 'master'

set :use_sudo, true

set :rbenv_type, :user
set :rbenv_ruby, '2.5.0'
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
set :rbenv_map_bins, %w{rake gem bundle ruby rails}
set :rbenv_roles, :all # default value

# Default branch is :master
# ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp

# Default deploy_to directory is /var/www/my_app_name
set :deploy_to, "/home/ubuntu/app_name"

【问题讨论】:

  • bundle 安装在哪里?也许该脚本在$PATH 中没有。使用which bundle,然后在脚本中确保它在echo $PATH中。
  • /home/ubuntu/.rbenv/shims/bundle 如何确保它在回显路径中?
  • 编辑任何失败的脚本并在那里添加echo $PATH
  • 对不起,这对我没有帮助,你能说得更具体点吗?
  • 也许了解 Capistrano 的人能够提供更好的帮助。但从我的角度来看,您有一个日志文件,其中包含一个错误,指出找不到 bundle。该日志文件是由某个脚本创建的。你没有指定哪个。我的建议是您找到该脚本并对其进行编辑以查看其PATH 环境变量中的内容。我会在不包含 /home/ubuntu/.rbenv/shims 的情况下投入资金。

标签: ruby-on-rails amazon-web-services capistrano rbenv puma


【解决方案1】:

想通了。原来是我的 config/deploy.rb 文件中的这一行:

set :rbenv_map_bins, %w{rake gem bundle ruby rails}

通过删除它可以工作......

【讨论】:

  • 你确定是这样吗?我问的原因是 capistrano-rbenv 本身默认设置相同的值,所以我很惊讶在 deploy.rb 中设置(或不设置)它有任何实际效果。见:github.com/capistrano/rbenv/blob/…
  • 对我来说也是这样,我不得不删除该行并且它起作用了
【解决方案2】:

对我来说,将以下行添加到config/deploy.rb

append :asdf_map_ruby_bins, 'puma', 'pumactl' # I use asdf to manage ruby plugins

# Or
# append :rbenv_map_bins, 'puma', 'pumactl' if you're using Rbenv, like OP

解决了这个问题。希望它可以帮助某人!

参考:https://github.com/seuros/capistrano-puma/issues/188

NB* append 是新的 Capistrano 语法,set 仍然有效

【讨论】:

    猜你喜欢
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    相关资源
    最近更新 更多