尝试执行 Heroku 运行 rake db:migrate 时出错



我正在制作小型Sinatra应用程序并尝试将其放在Heroku服务器上。

当我做 Heroku 运行 rake db:migrate 时,Heroku 给出错误"Gem::LoadError:为数据库适配器指定了'sqlite3',但 gem 未加载。将gem 'sqlite3'添加到您的 Gemfile 中(并确保其版本达到 ActiveRecord 要求的最小值)。

虽然我的 gem 文件中的开发组中有一个 sqlite3 gem。

source 'http://rubygems.org'
ruby '2.3.1'
gem 'sinatra'
gem 'activerecord', :require => 'active_record'
gem 'sinatra-activerecord', :require => 'sinatra/activerecord'
gem 'sqlite3', :group => :development
gem 'rake'
gem 'require_all'
gem 'thin'
gem 'shotgun', :group => :development
gem 'pry'
gem 'bcrypt'
gem "tux"
gem 'rack-flash3'
group :test do
gem 'rspec'
gem 'capybara'
gem 'rack-test'
gem 'database_cleaner', git: 'https://github.com/bmabey/database_cleaner.git'
end
group :production do
gem 'pg'
gem 'rails_12factor'
end

另外,请参阅下面的环境文件

require 'bundler/setup'
require 'rack-flash'
Bundler.require
configure :development do
ENV['SINATRA_ENV'] ||= "development"
ActiveRecord::Base.establish_connection(
:adapter => "sqlite3",
:database => "db/#{ENV['SINATRA_ENV']}.sqlite"
)
end
configure :production do
db = URI.parse(ENV['DATABASE_URL'] || 'postgres://localhost/mydb')
ActiveRecord::Base.establish_connection(
:adapter => db.scheme == 'postgres' ? 'postgresql' : db.scheme,
:host     => db.host,
:username => db.user,
:password => db.password,
:database => db.path[1..-1],
:encoding => 'utf8'
)
end
require_all 'app'

我还做了"捆绑安装 - 没有生产",并在Github上推送了所有内容。有人有任何可能的解决方案吗?

多谢!

错误来自在 gemfile 的gem 'sqlite3'行中具有group => development

您需要了解的是您的 Heroku 服务器正在使用什么环境。

要进行检查,请尝试从命令行运行heroku run console -a your-app-name(您需要安装 Heroku CLI)。

现在运行Sinatra::Base.development?Sinatra::Base.production?

运行这些命令的结果应该可以帮助您了解为什么包含group => development会导致rake db:migrate在 Heroku 而不是本地开发环境中失败。

最新更新