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

时间:2017-05-05 20:35:38

标签: ruby heroku sqlite sinatra sinatra-activerecord

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

当我做Heroku运行rake db:migrate时,Heroku正在为数据库适配器提供错误“Gem :: LoadError:Specified'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上推送了一切。有没有人有任何可能的解决方案?

非常感谢!

1 个答案:

答案 0 :(得分:0)

错误来自于宝石文件的group => development行中的gem 'sqlite3'

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

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

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

运行这些命令的结果应该有助于您了解包含group => development导致rake db:migrate在Heroku而不是本地开发环境中失败的原因。