首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Heroku - bundler:未能加载命令: unicorn

Heroku - bundler:未能加载命令: unicorn
EN

Stack Overflow用户
提问于 2017-08-11 00:16:04
回答 1查看 4.1K关注 0票数 4

Ruby2.3.1

Rails 5.1.2

一直试图将我的rails应用程序部署到heroku,方法是用https://github.com/heroku/heroku-buildpack-ruby.githttps://github.com/heroku/heroku-buildpack-nginx.git设置它的多构建包( multi,https://github.com/heroku/heroku-buildpack-ruby.git)。当我git push heroku master时,它成功地将回购文件上传到heroku。当我试图进入网站时,我会得到应用程序错误页面。因此,我去检查heroku logs,并看到以下错误:

代码语言:javascript
复制
Starting process with command `bin/start-nginx bundle exec unicorn -c config/unicorn.rb`
2017-08-10T23:41:44.799815+00:00 app[web.1]: bundler: failed to load command: unicorn (/app/vendor/bundle/ruby/2.3.0/bin/unicorn)
2017-08-10T23:41:44.799855+00:00 app[web.1]: ArgumentError: directory for pid=/app/shared/pids/unicorn.pid not writable
2017-08-10T23:41:44.799856+00:00 app[web.1]:   /app/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/lib/unicorn/configurator.rb:100:in `block in reload'
2017-08-10T23:41:44.799857+00:00 app[web.1]:   /app/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/lib/unicorn/configurator.rb:96:in `each'
2017-08-10T23:41:44.799857+00:00 app[web.1]:   /app/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/lib/unicorn/configurator.rb:96:in `reload'
2017-08-10T23:41:44.799858+00:00 app[web.1]:   /app/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/lib/unicorn/configurator.rb:77:in `initialize'
2017-08-10T23:41:44.799859+00:00 app[web.1]:   /app/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/lib/unicorn/http_server.rb:77:in `new'
2017-08-10T23:41:44.799859+00:00 app[web.1]:   /app/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/lib/unicorn/http_server.rb:77:in `initialize'
2017-08-10T23:41:44.799860+00:00 app[web.1]:   /app/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/bin/unicorn:126:in `new'
2017-08-10T23:41:44.799860+00:00 app[web.1]:   /app/vendor/bundle/ruby/2.3.0/gems/unicorn-5.3.0/bin/unicorn:126:in `<top (required)>'
2017-08-10T23:41:44.799861+00:00 app[web.1]:   /app/vendor/bundle/ruby/2.3.0/bin/unicorn:23:in `load'
2017-08-10T23:41:44.799864+00:00 app[web.1]:   /app/vendor/bundle/ruby/2.3.0/bin/unicorn:23:in `<top (required)>'

此外,我还得到了一个包含以下消息的常数循环:

代码语言:javascript
复制
2017-08-10T23:41:47.331854+00:00 app[web.1]: buildpack=nginx at=app-initialization
2017-08-10T23:41:57.364413+00:00 app[web.1]: buildpack=nginx at=app-initialization
2017-08-10T23:42:01.380323+00:00 app[web.1]: buildpack=nginx at=app-initialization
2017-08-10T23:42:06.411012+00:00 app[web.1]: buildpack=nginx at=app-initialization
2017-08-10T23:42:11.435965+00:00 app[web.1]: buildpack=nginx at=app-initialization
2017-08-10T23:42:15.465182+00:00 app[web.1]: buildpack=nginx at=app-initialization
2017-08-10T23:42:17.477769+00:00 app[web.1]: buildpack=nginx at=app-initialization
2017-08-10T23:42:26.520073+00:00 app[web.1]: buildpack=nginx at=app-initialization
2017-08-10T23:42:34.564750+00:00 app[web.1]: buildpack=nginx at=app-initialization
2017-08-10T23:42:35.568403+00:00 app[web.1]: buildpack=nginx at=app-initialization

我认为这是因为它试图从Procfile开始

代码语言:javascript
复制
web: bin/start-nginx bundle exec unicorn -c config/unicorn.rb

unicorn_init.sh:

代码语言:javascript
复制
#!/bin/sh

### BEGIN INIT INFO
# Provides:          unicorn
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the unicorn app server
# Description:       starts unicorn using start-stop-daemon
### END INIT INFO

set -e

USAGE="Usage: $0 <start|stop|restart|upgrade|rotate|force-stop>"

# app settings
APP_NAME="app"
APP_ROOT="$APP_NAME/"
ENV="production"

# environment settings
CMD="cd $APP_ROOT && bundle exec unicorn -c config/unicorn.rb -E $ENV -D"
PID="$APP_ROOT/shared/pids/unicorn.pid"
OLD_PID="$PID.oldbin"

# make sure the app exists
cd $APP_ROOT || exit 1

sig () {
  test -s "$PID" && kill -$1 `cat $PID`
}

oldsig () {
  test -s $OLD_PID && kill -$1 `cat $OLD_PID`
}

case $1 in
  start)
    sig 0 && echo >&2 "Already running" && exit 0
    echo "Starting $APP_NAME"
    su - $USER -c "$CMD"
    ;;
  stop)
    echo "Stopping $APP_NAME"
    sig QUIT && exit 0
    echo >&2 "Not running"
    ;;
  force-stop)
    echo "Force stopping $APP_NAME"
    sig TERM && exit 0
    echo >&2 "Not running"
    ;;
  restart|reload|upgrade)
    sig USR2 && echo "reloaded $APP_NAME" && exit 0
    echo >&2 "Couldn't reload, starting '$CMD' instead"
    $CMD
    ;;
  rotate)
    sig USR1 && echo rotated logs OK && exit 0
    echo >&2 "Couldn't rotate logs" && exit 1
    ;;
  *)
    echo >&2 $USAGE
    exit 1
    ;;
esac

unicorn.rb:

代码语言:javascript
复制
# set path to application
app_dir = "/app"
shared_dir = "#{app_dir}/shared"
working_directory app_dir


# Set unicorn options
worker_processes 2
preload_app true
timeout 30

# Set up socket location
listen "#{shared_dir}/sockets/unicorn.mysiteNginx.sock", :backlog => 64

# Logging
stderr_path "#{shared_dir}/log/unicorn.stderr.log"
stdout_path "#{shared_dir}/log/unicorn.stdout.log"

# Set master PID location
pid "#{shared_dir}/pids/unicorn.pid"

nginx.conf:

代码语言:javascript
复制
upstream unicorn {
  server unix:app/shared/sockets/unicorn.mysiteNginx.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  server_name www.mysite-webapp.herokuapp.com;
  root /app/public;

  location ^~ /assets/ {
      gzip_static on;
      expires max;
      add_header Cache-Control public;
  }

  # Feed
  location ~* \.(?:rss|atom)$ {
    expires 1h;
    add_header Cache-Control "public";
  }

  # Media: images, icons, video, audio, HTC
  location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
    expires 1M;
    access_log off;
    add_header Cache-Control "public";
  }

  # CSS and Javascript
  location ~* \.(?:css|js)$ {
    expires 1y;
    access_log off;
    add_header Cache-Control "public";
  }

  try_files $uri/home.html $uri.html $uri @unicorn;
  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn;
  }

  error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}

任何帮助都将不胜感激!

---UPDATE---

代码语言:javascript
复制
2017-08-11T03:32:29.113451+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=myway-webapp.herokuapp.com request_id=35e12b8e-20b2-4243-bf63-34f1301f5806 fwd="23.240.184.146" dyno= connect= service= status=503 bytes= protocol=http
2017-08-11T03:32:32.706739+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=myway-webapp.herokuapp.com request_id=ec761651-c8da-45de-9b3e-8ae4dae6a7f7 fwd="23.240.184.146" dyno= connect= service= status=503 bytes= protocol=http

---ANSWER---

需要将$PORT添加到我的Procfile中。

web: bin/start-nginx bundle exec unicorn -p $PORT -c config/unicorn.rb

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-11 01:43:32

如何消除参数错误:

最好的猜测是,当您使用pids将空的git push heroku文件夹推送到Heroku时,没有正确地克隆它。

因此,我要做的是首先检查它是否存在,如果不存在,使用mkdir pids创建它。

如何摆脱无限循环问题

忘记在Procfile中添加$PORT

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45625184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档