0

我有一个 rakefile.rb ,其中有一个名为add_latest_apps. 如果这些表不是使用 datamapper 创建的,则此任务会在数据库中创建一些表,从 xml 提要中抓取一些信息,然后将数据放入表中。问题是我似乎无法让我的 rake 任务运行。

如果我使用以下命令heroku run rake add_latest_apps,那么我得到:rake aborted! no such file to load -- dm-sqlite-adapter这向我表明正在尝试使用 sqlite 适配器,即使它应该使用 postgres 适配器。我究竟做错了什么?

rakefile.rb:

require 'open-uri'
require 'nokogiri'
require 'awesome_print'
require 'data_mapper'
require 'dm-postgres-adapter'
require 'pg'

task :add_latest_apps do
    DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/app.db")

class Company
    include DataMapper::Resource

    property :id, Serial
    property :company_name, String
    property :company_id, Text, :unique => true

    has n, :apps
end

class App
    include DataMapper::Resource

    property :id, Serial
    property :app_id, Integer
    property :bundle_id, Text
    property :app_name, Text
    property :company_name, Text
    property :created_at, DateTime
    property :rank, Integer

    belongs_to :company
end

DataMapper.finalize.auto_upgrade!

puts 'Database and tables created'

#Get App data from Apple
#Insert apps and companies into database

end

宝石文件:

source :rubygems
gem 'sinatra', '1.1.0'
gem 'thin'
gem 'nokogiri'
gem 'awesome_print'
gem 'data_mapper'
gem 'dm-postgres-adapter'
gem 'pg'

请帮忙!

4

1 回答 1

1

您需要设置DATABASE_URL环境变量。

问题出在这条线上:

DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/app.db")

在这里DataMapper查找ENV['DATABASE_URL'],如果未设置则回退到"sqlite3://#{Dir.pwd}/app.db",这会导致它尝试加载dm-sqlite-adapter

运行heroku config以显示您的环境变量,它可能不会显示DATABASE_URL。查看Heroku Postgres 文档以确定您的 URL 应该是什么。你也许可以做类似的事情heroku pg:promote HEROKU_POSTGRESQL_GRAY_URL(尽管你需要检查你应该使用什么颜色)。

于 2012-11-24T22:25:40.947 回答