【问题标题】:-su: bundle: command not found when starting unicorn-su: bundle: 启动独角兽时找不到命令
【发布时间】:2015-07-01 01:36:44
【问题描述】:

我正在关注 DigitalOcean 的教程(仅供参考,这是教程,link1link2),使用 unicorn 和 nginx 安装生产就绪的 Rails 应用程序,当我开始安装时独角兽。当我尝试在控制台中输入以下内容时:

sudo service unicorn_appname start

我收到此错误:

Starting appname
-su: bundle: command not found

所有用户都可以捆绑。这个消息对我来说毫无意义。有什么想法吗?

【问题讨论】:

  • gem install bundler?
  • 我已经为所有用户做了gem install bundler......如果我没记错的话,它似乎已经安装......因此错误消息很奇怪。
  • 您使用的是 RVM 还是 RBENV?我看教程推荐RBENV...
  • 我想你可能在这里有所收获,我可能已经安装了两者并将所有内容混合在一起。我要重新开始,一定要专门使用 rbenv,我会回来让大家知道发生了什么。
  • 好的,我已经返回...我再次按照教程进行操作,完全使用 RBENV,我得到了完全相同的信息。所以,RVM 不是问题。

标签: ruby-on-rails ruby nginx unicorn digital-ocean


【解决方案1】:

我的 unicorn_service 脚本的一部分:

USER="ubuntu"
APP_NAME="my_app_name"
APP_ROOT="/home/$USER/$APP_NAME"
ENV="production"
# environment settings
PATH="/home/$USER/.rbenv/shims:/home/$USER/.rbenv/bin:$PATH"

当我运行sudo service unicorn start 时,我得到了同样的错误,即bundle command not found

最初,路径存在于我的 .bashrc 文件中。

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

.bash_profile 中添加路径为我完成了工作。我猜它是从.bash_profile 而不是.bashrc 中获取$PATH

将此路径复制到.bash_profile 然后执行source .bash_profile 对我有用。

【讨论】:

    【解决方案2】:

    您可以通过将 rbenv 垫片路径添加到您的 .profile 来解决此问题

    cd ~
    vi .profile
    

    查找以 PATH=" 开头的行 在引用之后添加以下内容: $HOME/.rbenv/shims:

    保存文件(ESC :wq)

    像往常一样启动服务。

    【讨论】:

      【解决方案3】:

      我也遵循了相同的指南并遇到了同样的问题。

      init.d/unicorn_appname 中的启动脚本被评估为:

      su - deploy -c cd /home/deploy/appname && bundle exec unicorn -c config/unicorn.rb -E production -D
      

      root 用户在启动时将首先 su - 进入 rails 用户(在本例中为“deploy”),然后执行 bundle 以启动 unicorn。 rbenv 是单用户,只有 'deploy' 安装了包。如果您按照指南进行操作,则捆绑的路径可能存储在您的 .bashrc 文件中。但是 .bashrc 文件不是通过 su 登录调用的 - 并且导致捆绑包未安装错误。

      解决方案是在 .profile 中包含与 rbenv 相关的路径。这样,当 root su - into 'deploy' 时,路径就会被加载。

      【讨论】:

        【解决方案4】:

        看起来您使用“系统范围的 Ruby /usr/bin/ruby”启动服务,该服务尚未安装 gem “bundler”,而不是您希望在运行时使用的 Ruby 版本(通过 RVM 安装或RBENV 在用户命名空间中的某处)。在调用“bundle exec unicorn...”之前,确保所需的 Ruby 版本基础设施位于路径中。

        【讨论】:

        • 当我在同一目录中键入 bundler 时,我的应用程序会捆绑...所以我假设 bundler 已安装并在此目录中工作。同一目录:bundler -v Bundler version 1.9.4 那么我如何安装比已经安装的更多的捆绑程序?我不明白。
        • 在此处发布您的服务脚本。 (首先混淆或删除任何密码)
        猜你喜欢
        • 1970-01-01
        • 2013-09-29
        • 2012-06-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多