【问题标题】:DataMapper problems on HerokuHeroku 上的 DataMapper 问题
【发布时间】:2011-08-03 23:05:14
【问题描述】:

我正在尝试将一个简单的应用程序部署到 Heroku(Sinatra 并为 ORM 使用 DataMapper),每当我尝试提交表单时都会收到这些错误:

2011-08-03T22:52:05+00:00 heroku[router]: GET pure-mist-880.heroku.com/public/css/raffler.css dyno=web.1 queue=0 wait=0ms service=4ms status=404 bytes=18
2011-08-03T22:52:06+00:00 heroku[nginx]: GET /public/css/raffler.css HTTP/1.1 | 12.185.40.153 | 340 | http | 404
2011-08-03T22:52:15+00:00 app[web.1]: DataObjects::SyntaxError - ser=jjimxarsyb&password=2QbwU-iBQ6IckNTQqQ05&host=ec2-107-20-254-131.compute-1.amazonaws.com&port=&path=/jjimxarsyb&query=&fragment=&adapter=postgres:
2011-08-03T22:52:15+00:00 app[web.1]:  /app/.gems/gems/dm-do-adapter-1.1.0/lib/dm-do-adapter/adapter.rb:114:in `execute_non_

...
2011-08-03T22:52:16+00:00 heroku[nginx]: POST / HTTP/1.1 | 12.185.40.153 | 297 | http | 500

我目前使用的设置行是(取自 Heroku DevCenter):

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

编辑:

我在我的 .gems 文件中添加了 dm-do-adapter 并解决了该问题。现在,当我提交表单时,浏览器中仍然显示“内部服务器错误”,并且我的日志只显示:

2011-08-04T01:19:30+00:00 heroku[router]: GET pure-mist-880.heroku.com/ dyno=web.1 queue=0 wait=0ms service=54ms status=200 bytes=919
2011-08-04T01:19:30+00:00 heroku[nginx]: GET / HTTP/1.1 | 71.199.2.204 | 1218 | http | 200
2011-08-04T01:19:31+00:00 heroku[router]: GET pure-mist-880.heroku.com/public/css/raffler.css dyno=web.1 queue=0 wait=0ms service=2ms status=404 bytes=18
2011-08-04T01:19:36+00:00 heroku[router]: POST pure-mist-880.heroku.com/ dyno=web.1 queue=0 wait=0ms service=35ms status=500 bytes=30

我不知道为什么我的 .css 文件没有加载,以及为什么我提交表单时它失败了。

如果您需要更多代码 sn-ps,请告诉我。提前感谢您的任何想法。

【问题讨论】:

  • 我不确定,但 pure-mist-880.heroku.com/public/css/raffler.css 中的 public 不应该存在,因为该文件夹已映射到 / iirc。也许你在某个地方走错了路?也许在你的模板中?

标签: ruby heroku sinatra datamapper


【解决方案1】:

“public”不应该在任何地方的路线之外。

来自sintra.rb intro documentation

请注意,公共目录名称不包含在 URL 中。文件./public/css/style.cssexample.com/css/style.css 的形式提供。

如果您将静态资产放在其他地方,您也可以自己定义:

set :public, File.dirname(__FILE__) + '/static'

关于最后一行,你有一个post 根路由吗?比如:

post '/' do
  #form processing using params[:input_name]
end

此应用程序是否在本地开发环境中运行?

【讨论】:

  • 实际上,设置 :public 行正是使事情正常工作所需要的。我只是将 '/static' 更改为 '/public' 并且一切正常。我在生产中的本地机器上运行(使用 Thin)来测试当我将它上传到 Heroku 时的样子。感谢您的回答;它提醒我在过去的几天里我没有更新我的发现。 =]
  • 在经典的 sinatra 应用程序(没有 Sinatra::Base 子类化)中,它假定“public”是静态资产文件夹。当您编写现代 Sinatra 应用程序时,您必须使用 set :public 行指定静态资产与类一起存在的位置。 :) 干杯!
猜你喜欢
  • 1970-01-01
  • 2012-02-13
  • 2023-03-14
  • 1970-01-01
  • 2012-01-14
  • 2011-02-25
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
相关资源
最近更新 更多