我在 Linode 上運行 Ubuntu 22.04 服務器并嘗試使用 Apache 和 Puma 部署一個簡單的 Sinatra 應用程式,但目前,我只能顯示索引頁面,所以我相信我錯過了一個簡單的步驟。我不確定如何將 Puma 連接到 Apache,所以可能有一些與我遺漏的相關內容。以下是關鍵檔案:
/var/www/example.com/web.rb
require 'sinatra'
get '/' do
"Hello World"
end
/var/www/example.com/config/puma.rb
workers 2
threads 5, 5
preload_app!
port 5000
environment 'development'
/etc/apache2/sites-available/example.conf
<VirtualHost *:80>
ServerAdmin info@example.com
ServerName sinatra.example.com
DocumentRoot /var/www/example.com
<Directory /var/www/example.com>
DirectoryIndex web.rb
Allow from all
</Directory>
ErrorLog /var/www/example.com/logs/errors.log
CustomLog /var/www/example.com/logs/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =sinatra.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
然后我運行這些命令沒有問題:
bundle install
a2ensite
systemctl reload apache2
uj5u.com熱心網友回復:
您需要設定一個反向代理(如@konstantin-strukov 所述)。這是我設定的檔案的完整串列和我運行的命令(不包括安裝 apache 和 ruby??),這樣就不會有歧義了。
/var/www/example/web.rb
require 'sinatra'
get '/' do
"Hello World"
end
/var/www/example/Procfile
web: bundle exec puma -C config/puma.rb
/var/www/example/GEMFILE
source 'http://rubygems.org'
ruby '3.0.4'
gem 'sinatra', '~>2'
gem 'puma', '~>5'
注意:最近 Sinatra 發布了 3.0.0 版本,Puma 發布了 6.0.0,這導致與 Rack 沖突,所以我需要使用以前的版本才能使其作業。
/var/www/example/config.ru
require './web'
run Sinatra::Application
/var/www/example/config/puma.rb
workers 2
threads 1, 2
preload_app!
port 5000
environment "development"
app_dir = File.expand_path("../..", __FILE__)
bind "unix://#{app_dir}/tmp/puma/puma.sock"
stdout_redirect "#{app_dir}/logs/puma.stdout.log", "#{app_dir}/logs/puma.stderr.log", true
pidfile "#{app_dir}/tmp/puma/pid"
state_path "#{app_dir}/tmp/puma/state"
directory "#{app_dir}/"
activate_control_app "unix://#{app_dir}/tmp/puma/pumactl.sock"
prune_bundler
/etc/apache2/sites-available/example.conf
<VirtualHost *:80>
ServerAdmin info@example.com
ServerName sinatra.example.com
ProxyRequests Off
<Proxy *>
Order Allow,Deny
Allow from all
</Proxy>
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
ProxyVia On
DocumentRoot /var/www/example
<Directory /var/www/example>
DirectoryIndex web.rb
Allow from all
</Directory>
ErrorLog /var/www/example/logs/errors.log
CustomLog /var/www/example/logs/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =sinatra.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
/etc/systemd/system/puma.service
[Unit]
Description=Puma HTTP Server
After=network.target
Requires=puma.socket
[Service]
Type=notify
WatchdogSec=10
WorkingDirectory=/var/www/example
ExecStart=/usr/local/bin/puma -C /var/www/example/config/puma.rb
Restart=always
[Install]
WantedBy=multi-user.target
/etc/systemd/system/puma.socket
[Unit]
Description=Puma HTTP Server Accept Sockets
[Socket]
ListenStream=0.0.0.0:5000
# Socket options matching Puma defaults
NoDelay=true
ReusePort=true
Backlog=1024
[Install]
WantedBy=sockets.target
cd /var/www/example
捆綁安裝
mkdir /var/www/example/logs
mkdir /var/www/example/tmp
mkdir /var/www/example/tmp/puma
chmod 777 /var/www/example/logs
chmod 755 /var/www/example/tmp
chmod 755 /var/www/example/tmp/puma
a2ensite 示例
a2enmod
代理 proxy_ajp proxy_http 重寫放氣標頭 proxy_balancer proxy_connect proxy_html
systemctl 守護行程多載
systemctl 啟用 puma.service
systemctl 啟用 puma.socket
systemctl 啟動 puma.socket
systemctl 啟動 puma.service
systemctl 重新加載 apache2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/532818.html
