簡體   English   中英

如何在Nginx中部署ruby-on-rails應用程序?

[英]How can I deploy ruby-on-rails application in nginx?

我正在nginx ruby on rails應用程序中部署ruby on rails ,我的應用程序如下:

app/
    ...(omit other files)
    views/
        ...(omit other files)
        static_pages/
            ....(omit other files)
            home.html.erb
public/
    404.html
    422.html
    500.html
config/
    routes.rb
....(omit other files)

這是routes.rb

 Rails.application.routes.draw do
     root 'static_pages#home'
 end

這是Gemfile

source 'https://rubygems.org'
gem 'rails', '4.2.0'
gem 'bootstrap-sass', '~> 3.3.1'
gem 'sqlite3'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'bcrypt', '~> 3.1.7'
gem 'faker'
gem 'carrierwave'
gem 'mini_magick'
gem 'fog'
gem 'nokogiri'
gem 'will_paginate', '~> 3.0.6'
gem 'will_paginate-bootstrap'

group :development, :test do
  gem 'byebug'
  gem 'web-console', '~> 2.0'
  gem 'spring'
end

group :test do
  gem 'minitest-reporters'
  gem 'mini_backtrace'
  gem 'guard-minitest'
end

group :production do
  gem 'pg', '0.17.1'
  gem 'rails_12factor'
  gem 'unicorn'
end

如您所見,我的主頁是app/views/static_pages/home.html.erbpublic/只有一些錯誤頁面。

那么如何配置nginx指向我的主頁?(我的應用程序在/home/roger/blog/

server {
    listen 80 default;
    server_name example.com;
    location {
        root ?????????;
        index ?????????;
    }
}

您沒有將nginx配置為指向您的主頁,而是將nginx配置為將流量代理到您的rails應用程序,並且rails應用程序執行了其他所有操作(除少數例外)。

這是一個簡單的示例,假設rails應用正在偵聽套接字/tmp/unicorn.app.sock ,而應用根是/vagrant

upstream unicorn {
  server unix:/tmp/unicorn.app.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  root /vagrant/public;
  try_files $uri/index.html $uri @unicorn;

  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header HOST $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn;
  }

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

您可以將根目錄(在您的情況下為/home/roger/blog/public )和上游服務器更改為適合您的設置的任何文件(也許您要將unix:/tmp/unicorn.app.sock更改為http://127.0.0.1:3000 )。

這是一個無需更改即可為您工作的示例(假設您的應用服務器正在偵聽端口3000):

upstream blog {
  server 127.0.0.1:3000;
}

server {
  listen 80 default deferred;
  root /home/blog/roger/public;
  try_files $uri/index.html $uri @blog;

  location @blog {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header HOST $http_host;
    proxy_redirect off;
    proxy_pass http://blog;
  }

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM