アプリが 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