首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Capistrano和Puma部署Rails 5 API

使用Capistrano和Puma部署Rails 5 API
EN

Stack Overflow用户
提问于 2018-03-15 22:13:49
回答 1查看 1.2K关注 0票数 0

我试图在AWS服务器上部署一个带有Capistrano的Rails 5 API,我遇到了一些问题.

我遵循了教程,因此我尝试使用以下命令进行部署:

代码语言:javascript
复制
$ cap production deploy

生成以以下内容结尾的日志:

代码语言:javascript
复制
00:20 deploy:log_revision
      01 echo "Branch master (at <uuid>) deployed as release 20180315215050 by <user>" >> /<path_to_app>/revisions.log
    ✔ 01 <user>@<Public DNS (IPv4)> 0.206s

我想一切都还好吧。但是当我查询服务器时,我会收到来自nginx的502坏网关。当我$ ps aux | grep puma$ ps aux | grep rails没有发现任何进程在运行.

我的配置文件如下:

Capfile

代码语言:javascript
复制
# Load DSL and set up stages
require 'capistrano/setup'

# Include default deployment tasks
require 'capistrano/deploy'

# Load the SCM plugin appropriate to your project:
require 'capistrano/scm/git'
install_plugin Capistrano::SCM::Git

require 'capistrano/rvm'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
require 'capistrano/puma'

# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

config/deploy.rb

代码语言:javascript
复制
# config valid for current version and patch releases of Capistrano
lock '~> 3.10.1'

set :application, '<app_name>'
set :repo_url, '<git_repo>'
set :branch, 'master'
set :deploy_to, '/<path_to_app>'
set :pty, true
set :ssh_options, {
    forward_agent: true,
    auth_methods: ['publickey'],
    keys: ['/<path_to_key>.pem']
}
set :linked_files, %w{config/database.yml config/application.yml}
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/uploads}
set :keep_releases, 5
set :rvm_type, :user
set :rvm_ruby_version, '2.5.0'

set :puma_rackup, -> { File.join(current_path, 'config.ru') }
set :puma_state, "#{shared_path}/tmp/pids/puma.state"
set :puma_pid, "#{shared_path}/tmp/pids/puma.pid"
set :puma_bind, "unix://#{shared_path}/tmp/sockets/puma.sock"
set :puma_conf, "#{shared_path}/puma.rb"
set :puma_access_log, "#{shared_path}/log/puma_error.log"
set :puma_error_log, "#{shared_path}/log/puma_access.log"
set :puma_role, :app
set :puma_env, fetch(:rack_env, fetch(:rails_env, 'production'))
set :puma_threads, [1, 8]
set :puma_workers, 0
set :puma_worker_timeout, nil
set :puma_init_active_record, true
set :puma_preload_app, false

/etc/nginx/sites-available/default @@server

代码语言:javascript
复制
upstream app {
  # Path to Puma SOCK file, as defined previously
  server unix:/<path_to_app>/shared/tmp/sockets/puma.sock fail_timeout=0;
}

server {
  listen 80;
  server_name localhost;

  root /<path_to_app>/public;

  try_files $uri/index.html $uri @app;

  location / {
    proxy_set_header X-Forwared-Proto $scheme;
    proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Connection '';
    proxy_pass http://app;
  }

  location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt {
    gzip_static on;
    expires max;
    add_header Cache-control public;
  }

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

有人能查出我做错了什么吗?

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-03-15 22:34:12

您应该手动使用<...>设置参数。

对于config/deploy.rb

代码语言:javascript
复制
set :application, '<app_name>'
set :repo_url, '<git_repo>'
set :deploy_to, '/<path_to_app>'

代码语言:javascript
复制
set :ssh_options, {
    forward_agent: true,
    auth_methods: ['publickey'],
    keys: ['/<path_to_key>.pem']
}

对于/etc/nginx/sites-available/default @ @server:

代码语言:javascript
复制
server unix:/<path_to_app>/shared/tmp/sockets/puma.sock fail_timeout=0;

代码语言:javascript
复制
root /<path_to_app>/public;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49310099

复制
相关文章

相似问题

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