我的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
答案 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.