在Dreamhost上运行的Sinatra应用程序突然无法正常工作

时间:2010-12-27 03:50:14

标签: ruby sinatra passenger rack

我的Sinatra应用程序在Dreamhost上正常运行,直到几天前(我不确定它何时变坏)。现在,当我访问我的应用程序时,我收到此错误:

can't activate rack (~> 1.1, runtime) for ["sinatra-1.1.2"], already activated rack-1.2.1 for []

我不知道如何解决这个问题。我已经尝试更新我的所有宝石,然后触摸app/tmp/restart.txt文件,但仍无法修复。

我没有触及我的应用程序的任何文件,也没有触及我的Dreamhost帐户。它只是自己破坏了(我的猜测是DH在他们的服务器上改变了一些导致破坏的东西)。

当我最初部署我的应用程序时,我不得不通过一些箍来使它工作,我似乎认为我在自定义位置使用宝石,但我不记得究竟在哪里或如何。我不太了解Rack / Passenger的方式。

这是我的config.ru :(大多是从网络上嫁接的,我不完全理解它)

ENV['RACK_ENV'] = 'development' if ENV['RACK_ENV'].empty? 
#### Make sure my own gem path is included first 

ENV['GEM_HOME'] = "#{ENV['HOME']}/.gems"  
ENV['GEM_PATH'] = "#{ENV['HOME']}/.gems:" 
require 'rubygems'
Gem.clear_paths  ## NB! key part 
require 'sinatra'



set :env,  :production
disable :run

require 'MY_APP_NAME.rb'

run Sinatra::Application

3 个答案:

答案 0 :(得分:0)

看起来你打了一个不支持的Sinatra,Rack,Tilt版本。

看看如何解决这个问题:http://codex.heroku.com/past/2010/12/14/sinatra_on_dreamhost/

答案 1 :(得分:0)

这是典型的宝石激活问题。使用Bundler绕过它。

答案 2 :(得分:0)

您可以在需要之前尝试'固定'您的宝石版本。如果您对服务器有命令行访问权限,请尝试:

gem list

这应该显示安装了哪些宝石。但是你确实说你有一些自定义宝石路径可能不适用于此。有些东西称为'require'机架“',其版本与您的应用程序所期望的版本不同。它可能是Passenger,这意味着您可以希望升级到最新版本的Sinatra。

在Gem.clear_paths之后,你可以试试这个:

gem 'rack', '~>1.1'
gem 'sinatra', '~>1.0' # NB use whatever gem list shows you as the version of sinatra you were using when you deployed your application.