当我的应用程序尝试写入我的 sqlite3 数据库时,我收到“500 内部服务器错误”消息。
当我使用 WEBbrick 时一切正常,但是当我使用 Apache 和Passenger 时出现上述错误。我的应用程序加载第一页,但在尝试 POST 时失败。
这是我进行所有设置的方式:
真棒.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--
emails.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(内部服务器错误):服务器尝试完成请求时遇到了意外情况。” 我很确定它仍然与 apache 和 sqlite3 有关,因为当我注释掉“Email.create params[:email]”行时,我没有收到错误。
--更新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