2012-01-18 43 views
5

由於某些原因,heroku試圖要求使用dm-sqlite-adapter,儘管它應該在這裏使用Postgres。請注意,這發生在我打開任何URL時 - 而不是在git push本身。Sinatra + Heroku + Datamapper使用dm-sqlite-adapter部署問題

我構建了一個默認的Facebook應用程序。

的Gemfile中:

source :gemcutter 

gem "foreman" 

gem "sinatra" 
gem "mogli" 
gem "json" 
gem "httparty" 
gem "thin" 
gem "data_mapper" 
gem "heroku" 

group :production do 
    gem "pg" 
    gem "dm-postgres-adapter" 
end 

group :development, :test do 
    gem "sqlite3" 
    gem "dm-sqlite-adapter" 
end 

DataMapper的設置:

# Setting up the database 
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/data/mydatabase.db") 

相關日誌片段,當任何URL打開:

Starting process with command `bundle exec thin -R config.ru start -p 34984` 
2012-01-18T15:11:55+00:00 app[web.1]: /app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/adapters.rb:163:in `require': no such file to load -- dm-sqlite-adapter (LoadError) 
2012-01-18T15:11:55+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/adapters.rb:163:in `load_adapter' 

試了相關的解決方案,但沒有幫助,所以遠。

BTW:bundle installUsing do_postgresUsing dm-postgres-adapter。我是否缺少有關Datamapper安裝的信息?

+0

嘗試使用'development:test'的值設置一個'BUNDLE_WITHOUT'的配置var,看看會發生什麼 – 2012-01-18 15:40:16

+0

我猜我已經在發行'git push heroku master'時運行: 'Running:bundle install --without開發:測試 - 路徑供應商/捆綁--binstubs bin/--deployment' – LordTwaroog 2012-01-18 15:44:32

+0

你可以在本地使用Postgres嗎?這真是個好主意:http://www.12factor.net/dev-prod-parity – 2012-01-18 15:51:30

回答

9

好吧,Heroku上的Rails應用太多了,我把共享db的存在視爲理所當然。 heroku config既不顯示DATABASE_URLSHARED_DATABASE_URL集合。

發出heroku addons:add shared-database:5mb解決了這個問題。

奇怪的是,儘管在Gemfile中有'pg'gem,db並沒有自動添加。

http://devcenter.heroku.com/articles/cedar

引用:

甲Heroku的共享PostgreSQL數據庫(shared-database:5mb)將是 自動添加到你的應用在以下任一情況:

  • 該應用程序是一個Rails應用
  • pg寶石指定在Gemfile
+0

奇怪的是,我曾經見過這個,但從來沒有能夠複製它 – 2012-01-18 16:52:32

+1

嘿傢伙們,當我使用Active Record時,這並沒有發生,但是當我使用DataMapper時發生了這種情況。此外,我在一個免費帳戶,所以我不得不使用'heroku插件:添加heroku-postgresql' – christoshrousis 2014-04-10 10:25:45

3

改爲嘗試做DataMapper.setup(:default, ENV['DATABASE_URL'] || 'postgres://user:[email protected]/data/mydatabase.db')。 Heroku可能正在查看協議,因此需要SQLite的依賴關係。

+0

我也這麼認爲,但我改變了我的代碼,以包裝我的代碼在configure語句中,它仍然做同樣的事情。配置:發展做 DataMapper.setup(:默認情況下, 「sqlite3的://#{} Dir.pwd /recall.db」) 結束 配置:生產做 DataMapper.setup(:默認情況下,ENV [ 'DATABASE_URL' ]) end'此外,我會假設片段讀取ENV ['DATABASE_URL'] = true'並且不評估或語句的RHS。 – christoshrousis 2014-04-10 10:28:40