parse_rackup_file': файл стойки (config.ru) не читается (ArgumentError) Unicorn Nginx
Я использовал один щелчок Rails, NGINX, Unicorn, MySQL droplet, настроенный для создания моего сервера, и я не могу заставить Unicorn запускаться как демон. Вот трассировка стека, когда я /etc/init.d/unicorn start
:
/usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/lib/unicorn/configurator.rb:659:in `parse_rackup_file': rackup file (config.ru) not readable (ArgumentError)
from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/lib/unicorn/configurator.rb:77:in `reload'
from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/lib/unicorn/configurator.rb:68:in `initialize'
from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/lib/unicorn/http_server.rb:100:in `new'
from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/lib/unicorn/http_server.rb:100:in `initialize'
from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/bin/unicorn:126:in `new'
from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/unicorn-4.8.0/bin/unicorn:126:in `<top (required)>'
from /usr/local/rvm/gems/ruby-2.0.0-p195/bin/unicorn:23:in `load'
from /usr/local/rvm/gems/ruby-2.0.0-p195/bin/unicorn:23:in `<main>'
from /usr/local/rvm/gems/ruby-2.0.0-p195/bin/ruby_executable_hooks:15:in `eval'
from /usr/local/rvm/gems/ruby-2.0.0-p195/bin/ruby_executable_hooks:15:in `<main>'
Когда я which unicorn
Я получил:/usr/local/rvm/gems/ruby-2.0.0-p195/bin/unicorn
Кажется, это должно быть хорошо.
Я перепробовал все, что мог придумать, некоторые из которых включают в себя:
- Создание оболочки RVM =>
No bin path suitable for lining wrapper. Try setting 'rvm_bin_path'.
sudo gem install unicorn
=> Не удалось построить собственные расширения... (дляkgio 2.8.1). It's looking in
/usr/bin/ruby1.9.1` для extconf.rb. Я никогда даже не касался версии Ruby ниже 2.0.rvm remove 2.0.0-p353
=> Куча ошибок прав доступа к файлам. RVM не распознает чтоsudo
значит либо. Бьет меня...- Обращение в DigitalOcean => Они сказали, что нужно спросить "сообщество".
- После нескольких других руководств и предложений о символьных ссылках, размещении информации о PATH в файлах конфигурации и т. Д. Ничего не получалось.
Работает нормально, если запустить в фоновом режиме (-D
переключатель), но процессы все еще убиваются, как только я отключаюсь от терминала. У меня просто нет идей, и я занимаюсь этим уже два дня.
Дайте мне знать, если вы хотите, чтобы я публиковал фрагменты файлов или запускал команды. Я не хотел заполнять этот пост лишней информацией.
Помоги мне, AskUbuntu, ты моя единственная надежда...
*РЕДАКТИРОВАТЬ: * /etc/init.d/unicorn
set -e
NAME=unicorn
DESC="Unicorn web server"
. /lib/lsb/init-functions
if [ -f /etc/default/unicorn ]; then
. /etc/default/unicorn
fi
export PATH=/usr/local/rvm/gems/ruby-2.0.0-p195/bin:$PATH
export GEM_HOME=/usr/local/rvm/gems/ruby-2.0.0-p195
export GEM_PATH=/usr/local/rvm/gems/ruby-2.0.0-p195:/usr/local/rvm/gems/ruby-2.0.0-p195/gems:/usr/local/rvm/gems/ruby-2.0.0-p195@global/gems
DAEMON=/usr/local/rvm/gems/ruby-2.0.0-p195/bin/unicorn
PID=${PID-/run/unicorn.pid}
run_by_init() {
([ "${previous-}" ] && [ "${runlevel-}" ]) || [ "${runlevel-}" = S ]
}
exit_with_message() {
if ! run_by_init; then
log_action_msg "$1 Not starting."
fi
exit 0
}
check_config() {
if [ $CONFIGURED != "yes" ]; then
exit_with_message "Unicorn is not configured (see /etc/default/unicorn)."
fi
}
check_app_root() {
if ! [ -d $APP_ROOT ]; then
exit_with_message "Application directory $APP_ROOT is not exist."
fi
}
set -u
case "$1" in
start)
check_config
check_app_root
log_daemon_msg "Starting $DESC" $NAME || true
if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $UNICORN_OPTS; then
log_end_msg 0 || true
else
log_end_msg 1 || true
fi
;;
stop)
log_daemon_msg "Stopping $DESC" $NAME || true
if start-stop-daemon --stop --signal QUIT --quiet --oknodo --pidfile $PID; then
log_end_msg 0 || true
else
log_end_msg 1 || true
fi
;;
force-stop)
log_daemon_msg "Forcing stop of $DESC" $NAME || true
if start-stop-daemon --stop --quiet --oknodo --pidfile $PID; then
log_end_msg 0 || true
else
log_end_msg 1 || true
fi
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" $NAME || true
start-stop-daemon --stop --quiet --oknodo --pidfile $PID
sleep 1
if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $UNICORN_OPTS; then
log_end_msg 0 || true
else
log_end_msg 1 || true
fi
;;
reload)
log_daemon_msg "Reloading $DESC" $NAME || true
if start-stop-daemon --stop --signal HUP --quiet --oknodo --pidfile $PID; then
log_end_msg 0 || true
else
log_end_msg 1 || true
fi
;;
reopen-logs)
log_daemon_msg "Relopening log files of $DESC" $NAME || true
if start-stop-daemon --stop --signal USR1 --quiet --oknodo --pidfile $PID; then
log_end_msg 0 || true
else
log_end_msg 1 || true
fi
;;
status)
status_of_proc -p $PID $DAEMON $NAME && exit 0 || exit $?
;;
*)
log_action_msg "Usage: $0 <start|stop|restart|force-reload|reload|force-stop|reopen-logs|status>" || true
exit 1
;;
esac
/etc/default/unicorn
# Change parameters below to appropriate values and set CONFIGURED to yes.
CONFIGURED=yes
# Default timeout until child process is killed during server upgrade,
# it has *no* relation to option "timeout" in server's config.rb.
TIMEOUT=60
# Path to your web application, sh'ld be also set in server's config.rb,
# option "working_directory". Rack's config.ru is located here.
APP_ROOT=/home/rails/current/
# Server's config.rb, it's not a rack's config.ru
CONFIG_RB=/home/unicorn/unicorn.conf
# Where to store PID, sh'ld be also set in server's config.rb, option "pid".
PID=/home/unicorn/pids/unicorn.pid
UNICORN_OPTS="-D -c $CONFIG_RB -E production"
PATH=/usr/local/rvm/rubies/ruby-2.0.0-p195/bin:/home/unicorn/.rvm/bin:/usr/local/sbin:/usr/bin:/bin:/sbin:$
~
РЕДАКТИРОВАТЬ 2:
Успех!
Длинный след CHOWNs
а также CHMODs
позже (для разных файлов журнала Unicorn и PID), я просто получил master failed to start, check stderr log for details
когда я пытаюсь /etc/init.d/unicorn/
но мой unicorn.stderr.log
файл пуст Прослеживая больше конфигурационных файлов, приведу меня к некоторому журналу ошибок, который сказал, что некоторый каталог unicorn / pid / был недоступен для записи. Немного CHOWN
Действие позже, все хорошо.
Спасибо Бен!
1 ответ
Когда Unicorn - или любой Rack-совместимый серверный процесс - работает, ему требуется стойка (.ru
) файл, чтобы сказать ему, что делать. Если вы не указываете на это, он не знает, что подавать. Я бы сказал, сценарий в /etc/init.d/unicorn
не содержит полный путь к файлу для вставки вашего проекта, и ему это нужно. В большинстве, если не во всех приложениях Rails, в настоящее время есть одно, включенное в состав генератора проекта Rails (config.ru
).
Это руководство, которое вы читаете, инструктирует вас разместить свой код внутри /home/rails
, но помещает его конфигурационный файл в другом месте (/home/unicorn/unicorn.conf
). В большинстве установок, которые я видел, содержимое этого файла обычно находится в корне каталога Rails, который он обслуживает, но не имеет значения.
Руководство имеет конфигурацию в отдельном файле на /etc/default/unicorn
Я думаю, может быть, где виновник. Можете ли вы опубликовать источник этого файла?