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,所以我很困惑为什么这么说.
"关于这个问题的是我没有使用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文档.
| 归档时间: |
|
| 查看次数: |
2683 次 |
| 最近记录: |