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的问题应该会显示一些问题。
- 使用Postgresql在Datamapper中像(ilike)一样不区分大小写
- 如何告诉DataMapper对DateTime属性使用“timestamp with time zone”?
- Ruby Datamapper .count始终返回0
- Datamapper:通过关联对结果进行排序
- 一对一的DataMapper关联
- 通过DataMapper从SQLite内存DB中没有这样的表错误
- 未定义的方法auto_upgrade! 将Sinatra / DataMapper应用程序推送到Heroku时
- Sinatra将params 与字符串类型匹配,需要额外的转换才能匹配数据库ID?
- DataMapper有n通过资源DELETE(从关联中删除)不起作用