2017-08-11 54 views
3

红宝石2.3.1的Heroku - 打捆:未能加载命令:麒麟

的Rails 5.1.2

一直试图通过设置多buildpack应用程序部署我的轨到的Heroku(heroku buildpacks:set https://github.com/heroku/heroku-buildpack-multi.git)与https://github.com/heroku/heroku-buildpack-ruby.githttps://github.com/heroku/heroku-buildpack-nginx.git。当我git push heroku master,它成功地将回购上传到heroku。当我尝试进入网站时,出现应用程序错误页面。所以,我去检查heroku logs,我看到了以下错误:

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

另外,我得到一个恒定的循环以下消息:

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

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

unicorn_init.sh:

#!/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:

# 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:

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

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 

---答案---

需要添加$PORT到我Procfile

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

回答

0

如何摆脱的说法错误的:

最好的猜测是,当你使用它git push heroku被推到Heroku的空文件夹pids未正确克隆。

所以我要做的是首先检查,看看它是否存在,如果没有,使用mkdir pids创建它。

如何摆脱无限循环问题的

Forgot to add $PORT inside Procfile

+0

感谢您的帮助。现在我没有收到这些错误消息,但我仍然每秒都会收到'buildpack = nginx at = app-initialization'消息。我也仍然得到应用程序错误页面,但在日志中有两条消息。我更新了问题,以便您可以查看消息。 –

+2

把它解决了。忘记在'Procfile'内添加'$ PORT' –

+1

Okey精彩!很高兴我可以帮助,并很高兴你解决了它。 – Crashtor