簡體   English   中英

如何使用Passanger在Nginx上的Rails應用程序上部署ruby

[英]How deploy ruby on rails application on nginx with Passanger

我花了很多時間,只是卡住了:(

  1. 在Rails上的ruby中構建應用
  2. 在開發環境中使用Apache
  3. 必須使用Nginx和Passenger在Ubuntu 18.04 LTS上安裝生產
  4. 我將乘客添加到nginx中, 這里的乘客庫是如何描述的

應用程式無法運作,並顯示以下記錄:

  1. root的403禁止錯誤( https://cennik.leczymed.pl

    2019/02/08 21:46:19 [錯誤] 4743#4743:禁止* 2目錄索引“ / var / www / html / cennik / public /”,客戶端:XXX.XXX.XXX.XXX,服務器: cennik.leczymed.pl,請求:“ GET / HTTP / 2.0”,主機:“ cennik.leczymed.pl”

  2. 找不到其他子鏈接的404(例如https://cennik.leczymed.pl/rtg

    2019/02/08 21:46:25 [錯誤] 4743#4743:* 2 open()“ / var / www / html / cennik / public / rtg”失敗(2:無此類文件或目錄),客戶端:XXX .XXX.XXX.XXX,服務器:cennik.leczymed.pl,請求:“ GET / rtg HTTP / 2.0”,主機:“ cennik.leczymed.pl”

我的配置:

/etc/nginx/sites-available/cennik.conf

server {
    listen 80;
    server_name cennik.leczymed.pl;

    include snippets/letsencrypt.conf;
    return 301 https://cennik.leczymed.pl$request_uri;
}


server {
    listen 443 ssl http2;
    server_name cennik.leczymed.pl;

    # Tell Nginx and Passenger where your app's 'public' directory is
    root /var/www/html/cennik/public;

    # log files
    access_log /var/log/nginx/cennik.leczymed.pl.access.log;
    error_log /var/log/nginx/cennik.leczymed.pl.error.log;

    # Turn on Passenger
    passenger_enabled on;
    passenger_ruby /usr/bin/ruby2.5;

    ssl_certificate /etc/letsencrypt/live/cennik.leczymed.pl/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cennik.leczymed.pl/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/cennik.leczymed.pl/chain.pem;
    include snippets/letsencrypt.conf;
    include snippets/ssl.conf;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

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

}

應用程序的所有文件都在/ var / www / html / cennik目錄中。

drwxr-xr-x 16 cennik cennik 4096 Feb  8 20:53 .
drwxr-xr-x  6 root   root   4096 Feb  8 14:23 ..
drwxrwxr-x 10 cennik cennik 4096 Jul 27  2018 app
drwxr-xr-x  2 cennik cennik 4096 Jul 27  2018 bin
drwxr-xr-x  2 cennik cennik 4096 Feb  8 20:33 .bundle
drwx------  5 cennik cennik 4096 Feb  8 20:48 config
-rw-rw-r--  1 cennik cennik  130 Jul 27  2018 config.ru
drwx------  2 cennik cennik 4096 Jul 27  2018 db
-rw-rw-r--  1 cennik cennik 2371 Feb  8 19:58 Gemfile
-rw-r--r--  1 cennik cennik 5544 Feb  8 20:42 Gemfile.lock
drwxrwxr-x  7 cennik cennik 4096 Feb  8 19:47 .git
-rw-rw-r--  1 cennik cennik  687 Feb  8 19:47 .gitignore
drwxrwxr-x  4 cennik cennik 4096 Jul 27  2018 lib
drwxrwxr-x  2 cennik cennik 4096 Feb  8 20:53 log
drwxr-xr-x  2 cennik cennik 4096 Feb  8 20:53 node_modules
-rw-rw-r--  1 cennik cennik   64 Jul 27  2018 package.json
drwxrwxrwx  3 cennik cennik 4096 Feb  8 20:54 public
-rw-rw-r--  1 cennik cennik  227 Jul 27  2018 Rakefile
-rw-rw-r--  1 cennik cennik    5 Jul 27  2018 .ruby-version
drwxrwxr-x  2 cennik cennik 4096 Jul 27  2018 storage
drwxrwxr-x  9 cennik cennik 4096 Jul 27  2018 test
drwxrwxr-x  6 cennik cennik 4096 Jul 27  2018 tmp
drwxrwxr-x  3 cennik cennik 4096 Feb  8 20:33 vendor
-rw-r--r--  1 cennik cennik   86 Feb  8 20:53 yarn.lock

所有文件和目錄的所有者均為cennik用戶(如配方中所述)。

RoR應用程序內的目錄/ public具有所有特權(chmod 777)。

有什么想法嗎?

++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++

更新:

passenger-config --ruby命令

passenger-config was invoked through the following Ruby interpreter:
  Command: /usr/bin/ruby2.5
  Version: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
  To use in Apache: PassengerRuby /usr/bin/ruby2.5
  To use in Nginx : passenger_ruby /usr/bin/ruby2.5
  To use with Standalone: /usr/bin/ruby2.5 /var/lib/gems/2.5.0/gems/passenger-6.0.1/bin/passenger start

The following Ruby interpreter was found first in $PATH:
  Command: /home/artur/.rbenv/shims/ruby
  Version: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
  To use in Apache: PassengerRuby /home/artur/.rbenv/shims/ruby
  To use in Nginx : passenger_ruby /home/artur/.rbenv/shims/ruby
  To use with Standalone: /home/artur/.rbenv/shims/ruby /var/lib/gems/2.5.0/gems/passenger-6.0.1/bin/passenger start

因此,我認為nginx配置cennik.conf聲明了ruby目錄的正確位置: /usr/bin/ruby2.5

還有其他想法如何解決嗎?

************************更新************************* ******

好。 因此,我發現很少有可以幫助他人的事情。 我的問題僅適用於從先前版本升級到18.04的Ubuntu。 安裝nginx不會覆蓋nginx的conf(可以手動解決)。 更大的問題是為Ubuntu 18.04提供的nginx軟件包沒有使用乘客支持進行編譯。 因此,我現在正在尋找一種解決方案,該方法如何在其中編譯帶有乘客模塊的nginx並仍將其用於我的systemctl函數-從源代碼安裝可以正常工作,但是您不能將其作為服務使用:(

我發現一些特殊的方法可以使Ubuntu軟件包與編譯過程中的更改相兼容,但是我為乘客提供正確附件的任何嘗試都失敗了。

有人可以幫助我嗎?

我將乘客添加到nginx中,這里的乘客庫是如何描述的

看起來沒有配置中的“乘客”。 當您使用RVM時,應該在另一個位置放置ruby可執行文件。 要獲取紅寶石路徑,請轉到應用程序根目錄並運行以下命令並替換passenger_ruby指令。

> cd /var/www/html/cennik
> passenger-config --ruby-command
# It shows output like this

passenger-config was invoked through the following Ruby interpreter:
  Command: /home/deploy/.rvm/gems/ruby-2.3.5/wrappers/ruby
  Version: ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-linux]
  To use in Apache: PassengerRuby /home/deploy/.rvm/gems/ruby-2.3.5/wrappers/ruby
  To use in Nginx : passenger_ruby /home/deploy/.rvm/gems/ruby-2.3.5/wrappers/ruby
  To use with Standalone: /home/deploy/.rvm/gems/ruby-2.3.5/wrappers/ruby /usr/bin/passenger start

RoR應用程序內的目錄/ public具有所有特權(chmod 777)。

使公共目錄可執行不是一個好主意。 它可能包含用戶上傳的文件。 只需將權限設置為755,並授予運行nginx(www-data)的用戶或組權限即可。

暫無
暫無

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

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