在Heroku上使用Sinatra上下文执行任务

时间:2010-12-04 19:40:19

标签: ruby scope rake sinatra

我有一个建立在Sinatra上的应用程序。它由几个必须运行以设置数据库等的rake任务支持... rakefile看起来像这样

require 'rubygems'
require 'rake'
require 'rake/clean'
require 'rake/gempackagetask'
require 'rake/rdoctask'
require 'rake/testtask'
require File.dirname(__FILE__) + '/lib/config.rb'
require File.dirname(__FILE__) + '/lib/autoloads.rb'

@db = Mongo::Connection.from_uri(settings.db_uri).db(settings.db_uri[Regexp.new('[^/]*$')])
@cache = MemCache.new(settings.cache_server)

在我的开发机器上运行良好。现在,问题是在部署到Heroku之后,settings对象变得未定义,因此每个任务都失败了。你知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

看起来未加载定义设置的文件。在config.ru更改require 'my_sinatra_app' require './my_sinatra_app'see this question也是{{3}}。

答案 1 :(得分:0)

在构建sinatra应用程序时遇到了同样的问题 - 我想运行一些rake任务来执行数据库设置操作。

我最终做的是将数据库连接设置,连接和架构操作抽象到一个单独的类中。然后sinatra app和Rakefile可以访问这个类。

我的rakefile在这里:https://github.com/brighterplanet/status/blob/master/Rakefile#L6 从那里,查看lib / bp_status / db.rb