红宝石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.git
和https://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
感谢您的帮助。现在我没有收到这些错误消息,但我仍然每秒都会收到'buildpack = nginx at = app-initialization'消息。我也仍然得到应用程序错误页面,但在日志中有两条消息。我更新了问题,以便您可以查看消息。 –
把它解决了。忘记在'Procfile'内添加'$ PORT' –
Okey精彩!很高兴我可以帮助,并很高兴你解决了它。 – Crashtor