5

Elastic Beanstalkに(正しく)展開しようとしているRails 5 APIがあります。ここでElastic beanstalkにRails + Puma + Postgresアプリケーションを正しく展開するには?

は、私が使用して私の最初のconfig/puma.rbファイルです:

threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i 
threads threads_count, threads_count 

# Specifies the `port` that Puma will listen on to receive requests, default is 3000. 
port  ENV.fetch("PORT") { 3000 } 

# Specifies the `environment` that Puma will run in. 
environment ENV.fetch("RAILS_ENV") { "development" } 

# Allow puma to be restarted by `rails restart` command. 

plugin :tmp_restart 

私は、次のソケットエラーを取得:

2015/11/24 06:44:12 [crit] 2689#0: *4719 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream 

は、この問題を解決するために、私はラインの下に追加してみました、それが動作するようになった:

rails_env = ENV['RAILS_ENV'] || "production" 
if rails_env == "production" 
    bind "unix:///var/run/puma/my_app.sock" 
    pidfile "/var/run/puma/my_app.sock" 
end 

私の本物の質問は、これを正しい方法ですか?誰かがそれを前にしていたら、それを私に指摘することができますか?ドッカーのコンテナでこれを行う方法はありますか?

+0

は、あなただけのGemfileでピューマの宝石をインストールし、プーマとのRubyプラットフォームを選択しようとしましたElastic Beanstalkの設定を介して?最初に特別なプーマ設定ファイルなしで実行できるかどうかを確認します。 – littleforest

+0

@littleforestプーマの宝石はすでに私のgemfileにあった。私はこれらの2行を追加する以外には、他の設定はしていませんでした。私はレールに乗っています5 – aks

+0

あなたは乗客ではなく、プーマでRubyプラットフォームを起動したことを確認しましたか? – littleforest

答えて

3

RailsアプリをElastic BeanstalkまたはDockerにRails-Pumaアプリとしてデプロイすることもできます。答えはより一般的で、むしろをどこから始めるのがよりも完全な解決策を提供します。

ルビー - プーマ

これは非常に難しいことができます:あなたは(Webブラウザでの)コンソール経由でRuby用の新しいElastic Beanstalkで環境を作成する場合は、代わりにプーマのプラットフォームで、デフォルトでは旅客のプラットフォームを設定することができます。そして、おそらくあなたは、コンソールにそれを変更することはできません。

enter image description here

eb cliを使用し、プーマとの新しい環境を作成します。ニースウォークスルーhereあなたがeb createを実行する前に、しかし、あなたはもう一つのことをしなければならない - 選択プラットフォーム:

$ eb platform select 

It appears you are using Python. Is this correct? 
(y/n): n 

Select a platform. 
1) Go 
2) Node.js 
3) PHP 
4) Python 
5) Ruby 
6) Tomcat 
7) IIS 
8) Docker 
9) Multi-container Docker 
10) GlassFish 
11) Java 
(default is 1): 5 

Select a platform version. 
1) Ruby 2.3 (Puma) 
2) Ruby 2.2 (Puma) 
3) Ruby 2.1 (Puma) 
4) Ruby 2.0 (Puma) 
5) Ruby 2.3 (Passenger Standalone) 
6) Ruby 2.2 (Passenger Standalone) 
7) Ruby 2.1 (Passenger Standalone) 
8) Ruby 2.0 (Passenger Standalone) 
9) Ruby 1.9.3 
(default is 1): 

あなたはElastic Beanstalkでの労働者の代わりに、Webサーバーを作成したい場合は、次のコマンドを実行します

$ eb create -t worker 

あなたは使用することができますがコンソール(Webブラウザ)またはeb clidocs)を使用して他の設定を行います。どのようにセットアップ

ドッカー

後ポスト多分便利レール+プーマ+ nginxの+ドッカー:

http://codepany.com/blog/rails-5-and-docker-puma-nginx/

これは、nginxのは、ポート80およびストリーム要求にバインドされ多容器構成は、ありますプーマを介してソケット。あなたの場合は次のようになります:"unix:///var/run/puma/my_app.sock"

ドッカーをアップロードするには、AWS ECRを使用してDockerイメージを保存します。 Dockerrun.aws.jsonファイル(docker-compose.ymlファイルと非常に似ています)を作成する必要があります.Dockerrun.aws.jsonファイルは、AWS Console(Webブラウザ)経由で環境にデプロイすることができます。

EDITここ

puma.rb設定ファイルです:

threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 } 
threads threads_count, threads_count 

bind "unix:///var/run/puma.sock?umask=0000" 

stdout_redirect "/var/log/puma.stdout.log", "/var/log/puma.stderr.log", true 

# Specifies the `environment` that Puma will run in. 
# 
environment ENV.fetch('RAILS_ENV') { 'development' } 

# Allow puma to be restarted by `rails restart` command. 
plugin :tmp_restart 

一部の設定は変更になる場合がありますが、ポイントは、私はUnixのソケットにピューマサーバがバインドすると、それはnginxのと接続することです。 nginxの設定ファイル:

user root; 

error_log /var/log/app-nginx-error.log; 
pid  /var/run/app-nginx.pid; 

events { 
    worker_connections 8096; 
    multi_accept  on; 
    use     epoll; 
} 

http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/app-nginx-access.log main; 

    sendfile   on; 
    tcp_nopush   on; 
    tcp_nodelay  on; 
    keepalive_timeout 10; 

    upstream appserver { 
     server unix:///var/run/puma.sock; 
    } 

    server { 
     listen 80 default_server; 
     root /var/www/public; 
     client_max_body_size 16m; 

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

     try_files $uri/index.html $uri @appserver; 
     location @appserver { 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Host $server_name; 
     proxy_set_header Client-IP $remote_addr; 
     proxy_pass  http://appserver; 
     } 

     access_log /var/log/app-nginx-access.log; 
     error_log  /var/log/app-nginx-error.log debug; 
     error_page 500 502 503 504 /500.html; 
    } 
} 

nginxの設定ファイルの中で最も重要な部分である:あなたが行ったとき

upstream appserver { 
    server unix:///var/run/puma.sock; 
} 
+0

'puma.config'ファイルを貼り付けてください。この回答の有用性が向上します –

関連する問題