gpt4 book ai didi

ruby-on-rails - 如何使用Rails+Nginx+Postgresql+DigitalOcean访问远程数据库?

转载 作者:行者123 更新时间:2023-11-29 13:41:27 25 4
gpt4 key购买 nike

我有一个应用程序,我在其中使用与应用程序位于同一服务器 (DigitalOcean Droplet) 中的数据库。所以在我的 Rails 应用程序中它是:

配置/数据库.yml:

production:
<<: *default
database: example_production
username: rails
password: <%= ENV['EXAMPLE_DATABASE_PASSWORD'] %>

它正在工作。现在我想要一个专用的数据库服务器。 DigitalOcean 为其发布了 Databases 集群。所以我创建了它。

我的config/database.yml我改成了:

production:
url: <%= ENV["DO_DATABASE"] %>

我制作了 rails db:migrate 和 db:seed。它奏效了。当我检查数据库内容时,一切都在里面。所以我可以连接到数据库。

但是,在我的应用重新启动后,当我转到我的网页时,我收到:

502 Bad Gateway nginx/1.14.0 (Ubuntu)

过了一会儿它变成了:

503 Service Unavailable No server is available to handle this request.

我的服务器错误日志如下所示:

2019/02/18 23:33:06 [error] 32636#32636: *1267 connect() failed (111: Connection refused) while connecting to upstream, client: some_IP_which_doesnt_matter, server: _, request: "GET / HTTP/1.0", upstream: "http://127.0.0.1:3000/", host: "cloud.digitalocean.com"

所以:即使我可以连接到远程数据库进行迁移和播种,我也无法通过网页访问它。当我(一段时间)回到内部数据库时,页面就可以工作了。

我不知道它是关于服务器配置还是数据库配置(在 DigitalOcean 数据库集群中我无法访问配置文件,我只能直接访问 postgresql)。

在数据库 DigitalOcean 级别设置是常规的,因此:我的 Droplet 添加到“允许的入站来源”。基本上在 DigitalOcean 数据库面板中设置的选项很少。当您连接到它时,它看起来应该“像一个魅力”一样简单地工作。

我在 Droplet 的应用程序中尝试了很多 NGINX“服务器 block ”。现在文件/etc/nginx/sites-available/rails 看起来像这样:

server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
root /home/rails/model_app/public;
server_name _;
index index.htm index.html;

location ~ /.well-known {
allow all;
}

# From https://object.io/site/2015/rails-nginx-easy-assets
#
# Cache forever publicly: files for generated assets
# /assets/application-2565b50fc38a0b3a44882faa3e936262.css
#
# This setup means a CDN may cache these files
location ~ "^/assets/.+-[0-9a-f]{32}.*" {
gzip_static on;
expires max;
add_header Cache-Control public;
}

location / {
proxy_pass http://localhost:3000;
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-Proto $scheme;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header X-Client-Verify SUCCESS;
proxy_set_header X-Client-DN $ssl_client_s_dn;
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
}
}

我的防火墙设置:

Status: active

To Action From
-- ------ ----
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
22/tcp LIMIT Anywhere
3000 ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH ALLOW Anywhere
25060 ALLOW Anywhere
25061 ALLOW Anywhere
25060/tcp ALLOW Anywhere
25061/tcp ALLOW Anywhere
53 ALLOW Anywhere
53/tcp ALLOW Anywhere
53/udp ALLOW Anywhere
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
22/tcp (v6) LIMIT Anywhere (v6)
3000 (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
25060 (v6) ALLOW Anywhere (v6)
25061 (v6) ALLOW Anywhere (v6)
25060/tcp (v6) ALLOW Anywhere (v6)
25061/tcp (v6) ALLOW Anywhere (v6)
53 (v6) ALLOW Anywhere (v6)
53/tcp (v6) ALLOW Anywhere (v6)
53/udp (v6) ALLOW Anywhere (v6)

所以在我看来,这是 NGINX 配置的问题,但现在我不知道去哪里寻找。有什么想法吗?

[编辑]

这是关于应用程序服务器 - puma。使用“本地”数据库,它会自动启动:

rails@app:~/model_app$ ps aux | grep [p]uma
rails 31314 5.7 1.6 1054540 133500 ? Ssl 06:05 0:02 puma 3.12.0 (tcp://0.0.0.0:3000) [model_app]

对于“远程”数据库,它不会;t。当我运行它时:

bundle exec puma

那么结果是:

rails@app:~$ ps aux | grep [p]uma
rails 535 1.6 1.7 1056636 142552 pts/3 Sl+ 06:13 0:06 puma 3.12.0 (tcp://0.0.0.0:3000) [model_app]

我的文件:/etc/systemd/system/rails.service

[Unit]
Description=ExampleApp
Requires=network.target

[Service]
Type=simple
User=rails
Group=rails
WorkingDirectory=/home/rails/model_app/
ExecStart=/bin/bash -lc 'bundle exec puma'

TimeoutSec=30s
RestartSec=30s
Restart=always

[Install]
WantedBy=multi-user.target

为什么当我链接远程数据库时它没有自动启动?

最佳答案

您是否检查过您的应用服务器是否正在运行? Nginx在代理转发失败时给出502。尝试运行 ps aux | grep [p]uma(将 puma 替换为您正在使用的应用程序服务器)并查看它是否正在运行。

如果它没有运行,那么运行它,它应该可以工作。如果它仍然不起作用,则检查 nginx 日志中的错误 (/var/log/nginx/error.log)。你会发现问题在那里。如果您仍然需要帮助,请在此处发布日志文件的最后几行,以便我们尝试了解问题。

关于ruby-on-rails - 如何使用Rails+Nginx+Postgresql+DigitalOcean访问远程数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54773747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com