-su:bundle:启动unicorn时找不到命令

时间:2015-04-23 04:34:46

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

我正在关注DigitalOcean的教程(fyi,这是教程,link1link2),使用unicorn和nginx安装生产就绪的rails应用程序,当我到达关于安装独角兽的部分。当我尝试在控制台中键入它时:

sudo service unicorn_appname start

我收到此错误:

Starting appname
-su: bundle: command not found

所有用户都可以捆绑。这条消息对我没有意义。有什么想法吗?

4 个答案:

答案 0 :(得分:4)

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

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

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

启动时的root用户将首先进入rails用户(在这种情况下' deploy')然后使用bundle来启动独角兽。 rbenv是单用户,只是部署'已安装捆绑。如果您遵循指南,则bundle的路径可能存储在.bashrc文件中。但是.bashrc文件不是通过su登录而调用的 - 并且导致捆绑未安装错误。

解决方案是在.profile中包含与rbenv相关的路径。这种方式当root su - into' deploy'路径已加载。

答案 1 :(得分:3)

您可以通过将rbenv填充程序路径添加到.profile

来解决此问题
cd ~
vi .profile

查找以PATH =“开头的行 在报价之后添加以下内容: $ HOME / .rbenv /垫片:

保存文件(ESC:wq)

像往常一样启动服务。

答案 2 :(得分:1)

看起来你用“系统范围的Ruby / usr / bin / ruby​​”开始服务,它没有安装gem“bundler”,而不是你期望在运行时的Ruby版本(通过RVM安装或RBENV在用户名称空间中的某个地方)。确保所需的Ruby版本基础结构位于调用“bundle exec unicorn ...”之前的路径中。

答案 3 :(得分:0)

我的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中添加路径为我完成了工作。我猜这是从$PATH提取.bash_profile而不是从.bashrc提取。

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