我正在尝试在Ubuntu 16.04上使用NGINX和Puma在AWS上部署一个简单的Rails应用程序。我没有使用任何其他部署工具,因为我想先弄清楚所有工作原理。
我已经确认NGINX正在运行,并且可以从浏览器访问默认页面。 Puma也正在运行,我看不到任何问题。但是,当我尝试从浏览器访问Rails应用程序时,出现了“ 502 Bad Gateway”。
这是我的NGINX conf文件:
upstream hspc {
server unix:///home/ubuntu/hspc/shared/sockets/puma.sock;
}
server {
listen 80;
}
server_name ec2-24-347-141-127.us-west-1.compute.amazonaws.com;
root /home/ubuntu/hspc/public;
try_files $uri/index.html $uri @hspc;
location @hspc {
proxy_pass http://ec2-56-347-141-127.us-west-1.compute.amazonaws.com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* ^/assets/ {
# Per RFC2616 - 1 year maximum expiry
expires 1y;
add_header Cache-Control public;
}
}
我的Rails应用程序根目录位于/home/ubuntu/hspc
。我叫彪马
RAILS_ENV=production rails server
我的config/puma.rb
是标准的:
workers 1
threads 1, 6
app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/shared"
# Default to production
rails_env = ENV['RAILS_ENV'] || "production"
environment rails_env
daemonize false
# Set up socket location
bind "unix://#{shared_dir}/sockets/puma.sock"
# Logging
stdout_redirect "#{shared_dir}/log/puma.stdout.log", "#{shared_dir}/log/puma.stderr.log", true
# Set master PID and state locations
pidfile "#{shared_dir}/pids/puma.pid"
state_path "#{shared_dir}/pids/puma.state"
activate_control_app
on_worker_boot do
require "active_record"
ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished
ActiveRecord::Base.establish_connection(YAML.load_file("#{app_dir}/config/database.yml")[rails_env])
end
如果我尝试转到http://ec2-24-347-141-127.us-west-1.compute.amazonaws.com
或ec2-24-347-141-127.us-west-1.compute.amazonaws.com/users
,则会显示“ 502错误的网关”。
我的Rails应用程序在机器上的开发模式和生产模式下都可以正常工作。如何使它在服务器上工作?任何帮助将不胜感激。