运行Sinatra应用程序时出错

时间:2013-12-21 20:24:20

标签: ruby rubygems sinatra bundler sinatra-activerecord

我正在尝试使用最基本的app.rb运行Sinatra应用程序:

require 'sinatra/activerecord/rake'
require 'bundler/setup'
Bundler.require(:default)

require_relative './config'
require_relative './models/star'
require_relative './models/planet'
require_relative './models/moon'
require_relative './models/astronaut'

get '/' do 
  erb :index
end

使用Bundle并创建Gemfile.lock后,我不断收到此错误:

You have already activated activesupport 4.0.2, but your Gemfile requires activesupport 3.2.16. Using bundle exec may solve this. (Gem::LoadError)

我的Rakefile是:

source 'https://rubygems.org'

gem 'sinatra'
gem 'sinatra-reloader'
gem 'sinatra-activerecord'
gem 'activerecord', '~> 3.2.13'
gem 'rake'
gem 'pg'
gem 'pry'

我会对任何建议表示感谢。

1 个答案:

答案 0 :(得分:4)

您的系统上安装了ActiveRecord 4.0.2和3.2.13。您的应用的第一行需要sinatra/activerecord/rake,而requires activerecord则不需要指定哪个版本。这将激活并加载4.0.2 - 最新版本。

在下一行中,您尝试设置Bundler。 Bundler现在尝试激活Gemfile中指定的ActiveRecord版本3.2.13,但由于版本已经激活,因此无法启动,因此您会收到错误。

要解决此问题,只需确保在需要任何其他文件之前先致电require 'bundler/setup' 。这样可以确保您需要的所有文件都与Gemfile兼容。

或者,您可以移除要求bundler/setup的电话,并确保始终使用bundle exec启动您的应用。