【问题标题】:How to use Datamapper in conjunction with Heroku Scheduler?如何将 Datamapper 与 Heroku Scheduler 结合使用?
【发布时间】:2012-04-22 22:06:40
【问题描述】:

我有一个 Postgres 数据库,我在我的 ruby​​ Web 服务器上使用 Datamapper 进行操作。我正在尝试将 Heroku Scheduler 合并为每 10 分钟更新一次数据库的一部分。但是,当它尝试执行脚本时,它不断给出这个错误:

/app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/repository.rb:72:in `adapter': Adapter not set: default. Did you forget to setup? (DataMapper::RepositoryNotSetupError)

数据库是在服务器启动时初始化的,为什么这个脚本不能像我在其余代码中通常所做的那样更新数据库。

例如,调度程序调用的脚本将包含以下行:

User.update(:user_x => "whatever")

我绝对需要某个 require 语句吗?

【问题讨论】:

  • 我相信调度程序与您的应用程序是分开运行的,因此无论您在主应用程序文件中有什么设置连接,您都应该从调度的脚本中调用。
  • 没错。它将启动一个新的测功机,执行您指定的命令。

标签: ruby heroku sinatra datamapper


【解决方案1】:

首先,您需要将计划进程指向您的数据库,因此请包含 Datamapper.setup,但不要迁移或初始化。

然后你需要读取数据库。您可能希望 datamapper 创建对象模型,就像您的应用程序使用的那样。为此,我一直使用dm-is-reflective

require 'data_mapper'
require 'dm-is-reflective'
dm = DataMapper.setup(:default, ENV['DATABASE_URL'])

class User
  include DataMapper::Resource
  is :reflective
  reflect
end

p User.fields

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-27
    • 2017-01-03
    • 2023-03-14
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多