我正在尝试使用最基本的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'
我会对任何建议表示感谢。
答案 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
启动您的应用。