我正在关注DigitalOcean的教程(fyi,这是教程,link1,link2),使用unicorn和nginx安装生产就绪的rails应用程序,当我到达关于安装独角兽的部分。当我尝试在控制台中键入它时:
sudo service unicorn_appname start
我收到此错误:
Starting appname
-su: bundle: command not found
所有用户都可以捆绑。这条消息对我没有意义。有什么想法吗?
答案 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
对我有用。