1

アプリが sqlite3 データベースに書き込もうとすると、「500 Internal Server Error」というメッセージが表示されます。

WEBbrick を使用している場合はすべて問題なく動作しますが、Apache と Passenger を使用している場合は上記のエラーが発生します。私のアプリは最初のページを読み込みますが、POST しようとすると失敗します。

すべてをセットアップする方法は次のとおりです。

awesome.rb ファイル:

require 'sinatra'
require 'data_mapper'
require 'dm-core'
require 'dm-migrations'
require 'slim'

APP_ROOT = File.expand_path(File.dirname(__FILE__))
DataMapper::setup(:default, "sqlite3://#{APP_ROOT}/emails.db")

class Email
    include DataMapper::Resource
    property :id, Serial
    property :email, String, :required => true
end
DataMapper.finalize

get '/' do
    slim :index
end

post '/add' do
    Email.create params[:email]
    redirect '/'
end

config.ru ファイル:

require '/var/www/awesome'

root_dir = File.dirname(__FILE__)

set :environment, ENV['RACK_ENV'].to_sym
set :root, root_dir
set :app_file, File.join(root_dir, 'awesome.rb')
disable :run

run Sinatra::Application

httpd.conf ファイル:

<VirtualHost *:80>
  ServerName foo.com
  DocumentRoot /var/www/public
  <Directory /var/www/public>
    AllowOverride None
    Options FollowSymLinks
    Options -MultiViews
    Order Allow,Deny
    Allow from all
  </Directory>
</VirtualHost>

これは私のapache2.confファイルの一番下にあります:

LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p327/gems/passenger-3.0.18/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p327/gems/passenger-3.0.18
PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p327/ruby      

また、グループ www-data に /var/www への書き込みアクセス権を付与しました

- アップデート -

「ps axu | grep Pass」コマンドの出力は次のとおりです。

root     28373  0.0  0.7 220936  1884 ?        Ssl  13:15   0:00 PassengerWatchdog
root     28377  0.1  1.0 2067100 2528 ?        Sl   13:15   0:10 PassengerHelperAgent
root     28379  0.0  3.8 111856  9508 ?        Sl   13:15   0:00 Passenger spawn server                                                                                                                                            
nobody   28382  0.0  1.8 169332  4632 ?        Sl   13:15   0:00 PassengerLoggingAgent 

root ユーザーとしてすべてを実行しています。これは単なるテストサーバーであり、最初にすべてを機能させたいと思っていました. 以前は ruby​​ システム全体のインストールに問題があったため、クリーンなサーバーからやり直しましたが、他のユーザーは追加していません。

--更新2--

email.db は、chmod 777 で全員が読めるように設定されていましたが、chmod 666 に変更しました。ls -l の出力は次のとおりです。

-rw-rw-r-- 1 root     www-data   442 Dec 23 13:15 awesome.rb
-rw-rw-r-- 1 root     www-data   215 Dec 23 12:41 config.ru
-rw-rw-rw- 1 www-data www-data 12288 Dec 23 12:56 emails.db
-rw-rw-r-- 1 root     www-data    54 Dec 23 10:55 hello.rb
drwxrwxr-x 2 root     www-data  4096 Dec 22 14:50 log
drwxrwxr-x 2 root     www-data  4096 Dec 22 15:34 public
drwxrwxr-x 2 root     www-data  4096 Dec 23 12:03 tmp
drwxrwxr-x 2 root     www-data  4096 Dec 22 17:16 views

次に、「/etc/init.d/apache2 restart」で apache を再起動しました。chmod 777 から chmod 666 に変更しても問題が解決しないことはわかっていますが、おそらくもう少し安全です。アプリを再実行しても、同じ「HTTP エラー 500 (内部サーバー エラー): サーバーが要求を実行しようとしているときに、予期しない状況が発生しました。」というメッセージが引き続き表示されます。「Email.create params[:email]」行をコメントアウトするとエラーが発生しないため、Apache と sqlite3 とはまだ関係があると確信しています。

--更新 3--

「tail -f /var/log/apache2/error.log」の出力は次のとおりです。

96.18.233.137 - - [24/Dec/2012 20:46:54] "GET / " 200 706 0.0274
96.18.233.137 - - [24/Dec/2012 20:46:54] "GET /favicon.ico " 404 18 0.0013
96.18.233.137 - - [24/Dec/2012 20:47:01] "POST /add " 14 - 0.0046

そして、それが示すすべてです。クロムショー:

Request Method:POST
Status Code:500 Internal Server Error
4

0 に答える 0