gpt4 book ai didi

ruby-on-rails-4 - 尝试在 Digital Ocean 上运行 unicorn 和 Nginx 时,Unicorn 和 Gemfile 使用不同的 ruby​​ 版本

转载 作者:行者123 更新时间:2023-12-02 03:31:11 25 4
gpt4 key购买 nike

我正在尝试通过 Nginx 和 Unicorn 运行我的 Rails 应用程序,当我尝试运行 service unicorn start 时它告诉我我失败了 master failed to start,检查 stderr 日志以获取详细信息。我的 Gemfile 指定 ruby​​ 2.0.0,我的 ruby​​ 版本是 2.0.0p353。 Unicorn 似乎在使用 ruby​​ 2.1.3。如果 unicorn 默认使用 2.1.3,有没有办法让 unicorn 使用 ruby​​ 2.0.0。

当我跟踪 unicorn 日志时:

/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)

看起来错误可能是由于 unicorn 位于 /usr/local/rvm/gems/ruby-2.1.3/bin/ 而我的其他 gems 位于 /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"

我的 unicorn 文件 /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。

最佳答案

我不知道,如果这是正确的方法,但我是如何解决这个问题的:

  1. 杀死所有活跃的 unicorn 进程。执行 ps aux | grep unicorn 然后 kill -9 pid_number

  2. 根据 How To Use the 1-Click Ruby on Rails on Ubuntu 14.04 Image 更改 /etc/default/unicorn 中的 ruby​​ 版本.特别是这部分:

PATH=/usr/local/rvm/rubies/ruby-2.1.3/bin:/usr/local/rvm/rubies/ruby-2.0.0-p353/bin:/usr/local/rvm/gems/ruby-2.0.0-p353/bin:/home/unicorn/.rvm/bin:/usr/local/sbin:/usr/bin:/bin:/sbin:$ export GEM_HOME=/usr/local/rvm/gems/ruby-2.1.3 export GEM_PATH=/usr/local/rvm/gems/ruby-2.1.3:/usr/local/rvm/gems/ruby-2.1.3 DAEMON=/usr/local/rvm/gems/ruby-2.1.3/bin/unicorn

  1. 更改 /etc/init.d/unicorn 中的 ruby​​ 版本,特别是这部分:

export GEM_HOME=/usr/local/rvm/gems/ruby-2.2.1 export GEM_PATH=/usr/local/rvm/gems/ruby-2.2.1:/usr/local/rvm/gems/ruby-2.2.1/gems:/usr/local/rvm/gems/ruby-2.2.1@global/gems

在我的引文中,ruby 版本不匹配,因为一个引用来自文章,另一个来 self 的实际文件,但请确保在所有地方都有您喜欢的特定 ruby​​ 版本。

  1. 启动 unicorn :service unicorn start

假设您已经运行了 bundle install 并且拥有所有必要的 gem。

关于ruby-on-rails-4 - 尝试在 Digital Ocean 上运行 unicorn 和 Nginx 时,Unicorn 和 Gemfile 使用不同的 ruby​​ 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26683675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com