【问题标题】:Add local binstubs to rbenv (getting command not found)将本地 binstubs 添加到 rbenv(找不到命令)
【发布时间】:2015-03-20 04:54:27
【问题描述】:

如果您在 Rails 项目的本地 bin 目录中有简单的 shell 命令 binstub(例如,不是由 gem 生成或运行 gem),rbenv 似乎无法执行它们。比如@tpope的heroku binstubs在本地bin目录下生成一个名为production的binstub:

#!/bin/sh
HEROKU_APP=myapp-production HKAPP=myapp-production exec "${HEROKU_COMMAND:-heroku}" "$@"

在 rbenv rehash 之后,生产命令显示在 ~/.rbenv/shims 目录中,如下所示:

#!/usr/bin/env bash
set -e
[ -n "$RBENV_DEBUG" ] && set -x

program="${0##*/}"
if [ "$program" = "ruby" ]; then
  for arg; do
    case "$arg" in
    -e* | -- ) break ;;
    */* )
      if [ -f "$arg" ]; then
        export RBENV_DIR="${arg%/*}"
        break
      fi
      ;;
    esac
  done
fi

export RBENV_ROOT="/Users/Username/.rbenv"
exec "/usr/local/Cellar/rbenv/0.4.0/libexec/rbenv" exec "$program" "$@"

所以执行which production 会给你:

/Users/Username/.rbenv/shims/production

但是执行rbenv which production(或尝试运行命令)会给你:

rbenv: production: command not found

我是 rbenv 新手,所以我可能错过了配置步骤?

【问题讨论】:

    标签: ruby-on-rails ruby zsh rbenv


    【解决方案1】:

    显然,Rails 项目中特定于项目的 binstub 应保留在本地 bin/ 目录之外,因为它们主要用于 application scripts。因此,一种方法(即 rbenv-binstubs 插件使用的方法)是保持本地 binstub 分离并使用该本地 binstub 目录覆盖 rbenv 垫片(例如 .bundle/bin)。因此,通过使用该插件,您可能会从which production 看到这个结果:

    /Users/Username/.rbenv/shims/production
    

    但是如果你将production binstub 移动到.bundle/bin,那么rbenv which production 应该让步:

    {PROJECT_ROOT}/.bundle/bin/production
    

    【讨论】:

    • 本地bin 目录应该只用于应用程序脚本的想法是一场闹剧。使用最新版本的 rbenv,不再需要 rbenv-binstubs 插件,而且 rbenv 甚至有一个关于如何使用本地安装的 binstubs 的 wiki 文档。 github.com/rbenv/rbenv/wiki/Understanding-binstubs
    • @RyanMcGeary 多么奇怪的激烈和无益的评论。如果您对答案有更正/更新,特别是如果它基于这些工具的新版本,请提交编辑或添加新答案,我会更正。如果考虑到我当时(陈述的)有限的理解,问题本身很糟糕,也许完全删除它是有意义的。
    猜你喜欢
    • 2016-04-29
    • 1970-01-01
    • 2017-03-08
    • 2014-02-12
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    相关资源
    最近更新 更多