【问题标题】:Getting an error when try to do Heroku run rake db:migrate尝试执行 Heroku run rake db:migrate 时出错
【发布时间】:2017-10-04 10:24:21
【问题描述】:

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

当我执行 Heroku 运行 rake db:migrate 时,Heroku 给出错误“Gem::LoadError: Specified 'sqlite3' for database adapter, 但 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。有没有人有任何可能的解决方案?

非常感谢!

【问题讨论】:

  • 我认为您需要从 sqlite3 gem 中删除 group => development 以便它可以加载到您的生产环境中。
  • 在您的开发环境中安装 PostgreSQL 以便您使用相同的堆栈进行开发、测试和部署不是更简单(从长远来看更可靠)吗?

标签: ruby heroku sqlite sinatra sinatra-activerecord


【解决方案1】:

错误来自于在您的 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 而不是您的本地开发环境上失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2014-03-21
    • 2011-10-09
    • 2015-05-24
    • 2014-07-10
    • 2013-03-08
    相关资源
    最近更新 更多