【发布时间】:2025-12-25 06:45:06
【问题描述】:
我正在尝试通过 Nginx 和 Unicorn 运行我的 Rails 应用程序,当我尝试运行 service unicorn start 时,它告诉我我失败了 master failed to start, check stderr log for details。我的 Gemfile 指定 ruby 2.0.0,我的 ruby 版本是 2.0.0p353。 Unicorn 似乎正在使用 ruby 2.1.3。如果独角兽默认使用 2.1.3,有什么方法可以让独角兽使用 ruby 2.0.0。
当我跟踪独角兽日志时:
/usr/local/rvm/gems/ruby-2.1.3/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:294:in `join'
/usr/local/rvm/gems/ruby-2.1.3/gems/unicorn-4.8.3/bin/unicorn:126:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.1.3/bin/unicorn:23:in `load'
/usr/local/rvm/gems/ruby-2.1.3/bin/unicorn:23:in `<main>'
/usr/local/rvm/gems/ruby-2.0.0-p353/bin/ruby_executable_hooks:15:in `eval'
/usr/local/rvm/gems/ruby-2.0.0-p353/bin/ruby_executable_hooks:15:in `<main>'
E, [2014-10-31T20:55:57.551794 #15567] ERROR -- : reaped #<Process::Status: pid 30319 exit 1> worker=1
I, [2014-10-31T20:55:57.552041 #15567] INFO -- : worker=1 spawning...
I, [2014-10-31T20:55:57.553188 #30329] INFO -- : worker=0 spawned pid=30329
I, [2014-10-31T20:55:57.560300 #30331] INFO -- : worker=1 spawned pid=30331
I, [2014-10-31T20:55:57.587723 #30329] INFO -- : Refreshing Gem list
I, [2014-10-31T20:55:57.595703 #30331] INFO -- : Refreshing Gem list
E, [2014-10-31T20:55:57.940679 #30325] ERROR -- : Your Ruby version is 2.1.3, but your Gemfile specified 2.0.0 (Bundler::RubyVersionMismatch)
看起来该错误可能是由于独角兽位于/usr/local/rvm/gems/ruby-2.1.3/bin/ 而我的其他宝石位于/usr/local/rvm/gems/ruby-2.0.0-p353/bin/。
我的 unicorn.conf 看起来像:
worker_processes 4
user "rails"
working_directory "/home/rails"
pid "/home/unicorn/pids/unicorn.pid"
stderr_path "/home/unicorn/log/unicorn.log"
stdout_path "/home/unicorn/log/unicorn.log"
我的独角兽文件/etc/init.d 看起来像:
set -e
NAME=unicorn
DESC="Unicorn web server"
. /lib/lsb/init-functions
if [ -f /etc/default/unicorn ]; then
. /etc/default/unicorn
fi
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
```
And the start function in that file:
```
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
;;
随后是其他命令,如重新启动、停止等。
还有我的 Gemfile:
source 'https://rubygems.org'
ruby '2.0.0'
gem 'rails', '4.0.0'
gem 'sass-rails', '4.0.1'
gem 'uglifier', '2.4.0'
gem 'coffee-rails', '4.0.1'
gem 'jquery-rails'
gem 'jbuilder', '1.5.3'
gem 'bootstrap-sass', '3.1.1.0'
gem 'figaro'
gem 'rolify'
gem 'simple_form'
gem 'bcrypt-ruby', :require => 'bcrypt'
gem 'rails_12factor'
gem 'pg'
gem 'notes-cli'
gem 'twitter-typeahead-rails'
gem 'gon'
group :development do
gem 'better_errors'
gem 'binding_of_caller', :platforms=>[:mri_19, :mri_20, :rbx]
gem 'quiet_assets'
gem 'rails_layout'
gem 'mailcatcher'
gem 'rails-erd'
gem 'annotate'
end
group :development, :test do
gem 'factory_girl_rails'
gem 'rspec-rails'
gem 'faker'
gem 'pry'
gem 'rb-fsevent'
gem 'guard-rspec'
gem 'terminal-notifier-guard'
end
group :test do
gem 'capybara', '2.4.3'
gem 'database_cleaner'
gem 'email_spec'
end
如果有任何帮助,我将不胜感激。我是 Digital Ocean、Unicorn 和 Nginx 的新手,只有我的经验 在“部署”中使用 Heroku。
【问题讨论】:
-
我也有同样的问题!
标签: ruby-on-rails-4 unicorn ruby-2.0 digital-ocean ruby-2.1