2017-05-05 120 views
0

我正在製作小型Sinatra應用程序並試圖將它放在Heroku服務器上。嘗試做Heroku時出現錯誤運行rake db:migrate

當我在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' 

我也沒有 「捆綁安裝--without生產」,在Github上推的一切。有人有任何可能的解決方案?

非常感謝!

+0

我認爲你需要從sqlite3 gem中刪除'group => development',這樣它纔會加載到你的生產環境中。 – moveson

+0

在開發環境中安裝PostgreSQL會不會更簡單(從長遠來看更可靠),以便您可以使用相同的堆棧進行開發,測試和部署? –

回答

0

錯誤來自您的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上,而不是你的本地開發環境。