Heroku和Datamapper问题

cap*_*ght 3 ruby sqlite datamapper heroku sinatra

我可以在Heroku上启动一个基本的应用程序,显示带有'/'的消息......工作得很好.但是,每当我尝试使用datamapper添加sqlite时,事情就会崩溃.

要查看我的应用程序结构,请查看github上的项目.我保持代码相当简陋.

在heroku的日志中我得到:

2011-06-26T21:28:36+00:00 app[web.1]: /app/.bundle/gems/ruby/1.9.1/gems/dm-core-1.1.0/lib/dm-core/adapters.rb:163:in `require': no such file to load -- dm-postgres-adapter (LoadError)
Run Code Online (Sandbox Code Playgroud)

关于这一点的是我没有使用postgres,所以我很困惑为什么这么说.

mat*_*att 9

"关于这个问题的是我没有使用postgres,所以我很困惑为什么会说这个."

你正在使用Heroku,所以你正在使用Postgresql.

在你的app.rb你有这样一行:

DataMapper::setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/notes.db")
Run Code Online (Sandbox Code Playgroud)

我猜你是从Heroku数据库文档中得到的.这行基本上是说"检查环境变量'DATABASE_URL',如果设置它,则使用它作为数据库url,否则使用Sqlite url".在本地运行此环境变量将不会被设置,因此您将使用Sqlite网址,但在Heroku上,这将设置为类似的内容(请参阅上面链接的页面):

postgres://username:password@hostname/database
Run Code Online (Sandbox Code Playgroud)

Datamapper会看到这是一个Postgresql url,并尝试要求postgres适配器,它没有安装,因此会导致您看到的错误.

最好的解决方案是在本地安装Postgresql,以便您的开发和生产环境尽可能相似.如果您不能这样做,或者不想这样做,您可以在本地指定Sqlite适配器,并在生产中指定Postgres适配器.它在Gemfile中看起来像这样:

group :development do
  gem 'dm-sqlite-adapter'
end

group :production do
  gem 'dm-postgres-adapter'
end
Run Code Online (Sandbox Code Playgroud)

如果你这样做,你需要告诉Heroku在安装宝石时要忽略哪些组,请参阅Heroku Gem Bunder文档.