我已经在Ubuntu 12.04服务器上安装了带有unicorn的nginx。一切正常,站点,数据库,unicorn...good。因此,我正在尝试确保在重启后,nginx和unicorn启动。我已经为我的独角兽进程设置了update-rc.d,但它在重启后不能启动/工作。我怀疑这与ubuntu使用"service“而不是"/etc/init.d/unicorn_init”有关。
换句话说:
如果我执行:
$ /etc/init.d/unicorn_init startunicorn启动得很好,没有错误。
如果我执行:
$ service unicorn_init start它会失败,并且unicorn无法启动。
我认为这与路径有关。我已经向PATH、GEM_PATH和GEM_HOME添加了环境路径,但我仍然收到相同的结果
1,如果我运行/usr/local/rvm/gems/ruby-1.9.3-p194/bin/unicorn,,我会得到错误:
usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find unicorn (>= 0) amongst[bigdecimal-1.1.0, io-console-0.3, json-1.5.4, minitest-2.5.1, rake-0.9.2.2, rdoc-3.9.4] (Gem::LoadError)
from /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
from /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems.rb:1231:in `gem'
from /usr/local/rvm/gems/ruby-1.9.3-p194/bin/unicorn:18:in `<main>'2,如果我运行/var/rails/web-app/bin/unicorn,我会得到错误:
/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- bundler/setup (LoadError)
from /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /var/rails/web-app/bin/unicorn:14:in `<main>'任何帮助都将不胜感激!谢谢
发布于 2012-05-05 03:19:15
您应该使用包含所有必需环境变量的unicorn包装器脚本:
rvm wrapper 1.9.3 ruby-1.9.3 unicorn它将使用它来生成ruby-1.9.3_unicorn,而不仅仅是在初始化脚本中使用独角兽。
您可以通过以下命令找到有关包装器的更多详细信息:
rvm wrapper如果工作是通过bundler完成的(比如capitrano),那么为bundle生成一个包装器
rvm wrapper 1.9.3 ruby-1.9.3 bundle并使用此命令显示的包装器的完整路径:
which ruby-1.9.3_bundle发布于 2013-01-28 04:16:39
你说得对,Eric,我自己做,在开发模式下运行很好。这个例子不能正确使用,它仍然很粗糙。
我的config/unicorn_init文件:
TIMEOUT=${TIMEOUT-60}
PID=$APP_ROOT/tmp/pids/unicorn.pid
CMD="PATH=$_PATH GEM_HOME=$_GEM_HOME GEM_PATH=$_GEM_PATH $APP_ROOT/.bundle/bin/unicorn -D -c $APP_ROOT/config/unicorn.rb"
set -e
action="$1"
set -u
old_pid="$PID.oldbin"
cd $APP_ROOT || exit 1
sig () {
test -s "$PID" && kill -$1 `cat $PID`
}
oldsig () {
test -s $old_pid && kill -$1 `cat $old_pid`
}
case $action in
start)
sig 0 && echo >&2 "Already running" && exit 0
su -c "$CMD" - $APP_USER
;;
stop)
sig QUIT && exit 0
echo >&2 "Not running"
;;
force-stop)
sig TERM && exit 0
echo >&2 "Not running"
;;
restart|reload)
sig HUP && echo reloaded OK && exit 0
echo >&2 "Couldn't reload, starting '$CMD' instead"
su -c "$CMD" - $APP_USER
;;
upgrade)
if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
then
n=$TIMEOUT
while test -s $old_pid && test $n -ge 0
do
printf '.' && sleep 1 && n=$(( $n - 1 ))
done
echo
if test $n -lt 0 && test -s $old_pid
then
echo >&2 "$old_pid still exists after $TIMEOUT seconds"
exit 1
fi
exit 0
fi
echo >&2 "Couldn't upgrade, starting '$CMD' instead"
su -c "$CMD" - $APP_USER
;;
reopen-logs)
sig USR1
;;
*)
echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
exit 1
;;
esacecho "#\!/bin/bash\n_PATH=$PATH\n_GEM_HOME=$GEM_HOME\n_GEM_PATH=$GEM_PATH\nAPP_ROOT=$(pwd)\nAPP_USER=$USER\n$(cat config/unicorn_init)" > config/unicorn_init.shchmod +x config/unicorn_init.sh发布于 2018-07-09 03:36:13
这是6年前这个问题/答案的更新。从RVM 1.29.4和ubuntu16.04开始。mpapis的答案仍然适用于旧版本的ubuntu和rvm。
从RVM 1.29.4开始,上述答案vm wrapper 1.9.3 ruby-1.9.3 unicorn不再有效,也不再是必需的。
包装器已经创建,如果需要,可以在它们的位置以及适当的gemset中找到它。
在以下目录位置/usr/local/rvm/wrappers中查找。在那里你会找到一个链接到你想要的ruby版本& gemset。点击这个链接,你会看到它的所有包装器:unicorn, unicorn_rails, god, puma, thin, thor, ...,等等。
示例:
TIMEOUT=${TIMEOUT-60}
APP_ROOT=/var/rails/com.domain.site/current
PID=$APP_ROOT/tmp/pids/unicorn.pid
DAEMON=/usr/local/rvm/wrappers/ruby-2.5.1@app/unicorn
CMD="$DAEMON -D -c $APP_ROOT/config/unicorn.rb -E production"或者,您也可以使用直接路径:
DAEMON=/usr/local/rvm/gems/ruby-2.5.1@app/wrappers/unicorn你明白我的意思(^_^)
https://stackoverflow.com/questions/10454292
复制相似问题