我在Dreamhost虚拟专用服务器上。我之前从未编写过Sinatra应用程序或任何其他Rack应用程序。我只想尝试运行Hello World应用程序,但我一直收到错误的乘客错误页面:
no such file to load -- rack
我在域名/应用根目录中创建了public/
和tmp/
。
同样在app根目录中的是config.ru
:
require 'rubygems'
require 'sinatra'
require 'myapp'
run Sinatra::Application
我从Nginx文档中的Passenger中提取Sinatra section。
最后,这是myapp.rb
,我从Sinatra Intro doc的顶部撤出。
# myapp.rb
require 'sinatra'
get '/' do
'Hello world!'
end
我怎样才能让它发挥作用?
修改
以下是乘客错误页面上给出的堆栈跟踪的前三行:
0 /usr/lib/ruby/1.8/rubygems/custom_require.rb 31 in `gem_original_require'
1 /usr/lib/ruby/1.8/rubygems/custom_require.rb 31 in `require'
2 /dh/nginx/passenger/lib/phusion_passenger/rack/application_spawner.rb 145 in `load_rack_app'
更新
我怀疑我发现为什么乘客无法找到机架,但我仍然没有找到解决方案。在nginx.conf
的顶部是这一行:
user dhapache;
Passenger似乎正在寻找宝石dhapache
或root
,我不确定它是基于ps aux | less
给出的流程列表:
root PassengerNginxHelperServer /dh/nginx/passenger ruby 3 4 0 6 0 300 1 nobody 999 150 /tmp/passenger.19012
root Passenger spawn server
dhapache nginx: worker process
dhapache nginx: worker process
root nginx: master process /dh/nginx/bin/nginx-be -c /dh/nginx/servers/httpd-ps77303/nginx.conf -p /dh/nginx/servers/httpd-ps77303/var/
但是,在任何一种情况下,gem env
列出的宝石路径仅指向没有宝石的地方。如果乘客在这些地方寻找宝石,它就不会找到任何宝石。
来自sudo -u dhapache gem env
/var/lib/gems/1.8
/root/.gem/ruby/1.8
来自sudo -u root gem env
/var/lib/gems/1.8
/dh/apache/.gem/ruby/1.8
在这两种情况下,第一个(相同的)目录都是空的,列出的第二个目录不存在。
在此服务器设置中,应用程序托管在/home/[username]/[domain]/
下,本地gem位于/home/[username]/.gems/
。作为app用户运行gem env
会显示本地gem路径。
如何让乘客找到我当地的宝石?