Heroku和Datamapper问题

我可以在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) 

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

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

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

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

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

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

 postgres://username:password@hostname/database 

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

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

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

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

您正在从sqlite迁移到postgres-sql,因此您应该在Gemfile中包含dm-postgres-adapter (并安装它)。

Heroku仅支持只读文件系统 (或者至少仅支持您希望持久化的任何文件的只读操作)。 因此,您不能在Heroku上使用SQLite。 Heroku仅支持PostgreSQL作为数据库,因此您需要配置DataMapper以使用PostgreSQL(参见Yet Another Geek的答案 )。

如果您计划部署到Heroku,我建议您在开发环境中安装PostgreSQL。 每个数据库都有一点不同,没有ORM可以保护您免受差异的影响。 如果您在一个数据库上进行开发但在另一个数据库上进行部署,那么搜索标记为heroku和postgresql的问题应该会显示一些问题。