部署 CentOS 7 上 使用 Thin + Nginx 部署 Rails 应用程序出错

babyhai · 2017年07月01日 · 最后由 babyhai 回复于 2017年07月02日 · 2126 次阅读
ruby  : 2.3.3
rails : 5.1.1
nginx  : 1.0.1
mysql :5.7

注明:我是按照 这个操作的 (http://web.siwei.tech/part3_rails_premier/rails_thin_deploy.html)

描述一下我的问题,配置了 nginx.conf 文件 rails 项目的地址 thin.yml 配置文件也写了 但是访问还是显示的 是 nginx 的欢迎页面:

# config/thim.yml

  chdir: /www/Mylog   # 你的rails 应用的所在目录
   environment: production    # 指定了 是 production模式
   address: 0.0.0.0
   port: 8000                 # 端口号。
   timeout: 30
   log: log/thin.log
   pid: tmp/pids/thin.pid
   max_conns: 1024
   max_persistent_conns: 100
   require: []
   wait: 30
   servers: 2          # 很重要。希望启动的thin 的进程数。
   daemonize: true
#    config/secrets.yml
  production模式下的字符串是随意加的
development:
  secret_key_base: e4122773d4324fce978c52cde790d84d14f7194f377aea41b7b8302d1d10150e6076a3b7e5e0c1f24ca330cf0a058482c9

 test:
   secret_key_base: e4122773d4324fce978c52cde790d84d14f7194f377aea41b7b8302d1d10150e6076a3b7e5e0c1f24ca330cf0a058482c9

  production:
    secret_key_base: a1b2c3d4a5d6e4122773d4324fce978c52cde790d84d14f7194f377aea41b7b8302d1d10150e60
#  confi/ database.yml

default: &default
   adapter: mysql2
    encoding: utf8
    pool: 5
    username: root
    password: youshe
   host: localhost

  development:
    <<: *default
    database: mylog_development


 test:
    <<: *default
    database: mylog_test

production:
   <<: *default
   database: mylog_development
   username: root
   password: youshe


#   config/environments/production.rb

Cms::Application.configure do
    # 不让 rails 来处理 /assets 开头的 url, 这些要交给nginx来处理.
    config.serve_static_assets = false
end

#   opt/nginx/nginx-1.0.10/conf/nginx.conf  (nginx 我是源码编译 安装在opt下面)
user  mandy;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

   #gzip  on;

    server {
        listen       80;
        server_name  athonna.com;

        charset utf-8;
        root  /www/Mylog/public/;

        access_log  logs/access.log;
        error_log  logs/error.log;

        location / {

             proxy_pass      http://athonna_servers;
             proxy_redirect      default;

             proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header    X-Real-IP $remote_addr;
             proxy_set_header    Host $http_host;
             proxy_next_upstream http_502 http_504 error timeout invalid_header;
         }

         #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html

        location ~ ^/assets/ {

          # 表示 处理这些请求的话,应该从哪个文件夹开始
          root  /www/Mylog/public/;
          expires 1y;
          add_header Cache-Control public;
          add_header ETag "";
          break;
        }

    }

我想问问 是哪里有问题呢 我使用 thin 的 development -p 8000 这么访问是没问题可以访问的

然后 换成 bundle exec thin start -p 8000 -e production 也可以访问 图片都能显示出来 ,但是在 config/environments/production.rb 中加了

#  config/environments/production.rb

Cms::Application.configure do
    # 不让 rails 来处理 /assets 开头的 url, 这些要交给nginx来处理.
    config.serve_static_assets = false
end

就不在显示 图片了 ,后面把这个注释掉 也还是不显示图片 css 这些

应该是 Nginx 没配对,你看见你仿照的文章中有这个
upstream rails_girls_site{ server localhost:3560; server localhost:3561; }

你了解这个的作用吗?你的 proxy_pass 那 的 athonna_servers 是怎么来的?觉得应该是这个东东你没配。另外 你可以尝试用 PUMA,也许实际工作中使用 PUMA 的机会比 thin 多

upstream athonna_servers{ server localhost:8000}加上这个试试

好的,谢谢。我是部署到服务器上 运营我的博客

还是不行

可以贴下新的 Nginx 配置 查下 8000 端口被谁使用,配置完 Nginx 要重启 Nginx

pathbox 回复

我怎么感觉用 0.0.0.0:8000 会可以 & 我觉得都用了本机的 thin 了 直接用 UnixSocket 会好一些吧

so_zengtao 回复

我不会用 8000 端口(rails 不是推荐 3000 端口嘛),我也不会用 thin(puma 挺好的)

我正在尝试使用 puma😂

upstream athonna_servers{ server localhost:8000;

} 复制到 server { 上面试试 是不是 8000 后面少个 ;

zaqmjuop 回复

我用手机回的,漏了这个,不过懂 Nginx 配置的应该知道这个吧。。。或者 在 sudo nginx -t 的时候 也可以检测语法错误

pathbox 回复

我检查了 是 ok 的

问题已经解决了 ,谢谢各位帮忙

babyhai 关闭了讨论。 07月02日 09:39
需要 登录 后方可回复, 如果你还没有账号请 注册新账号