我一直在将一些MySQL查询迁移到PostgreSQL以使用Heroku.我的大多数查询工作正常,但当我使用group by时,我仍然遇到类似的重复错误:
错误:列"XYZ"必须出现在GROUP BY子句中或用于聚合函数
有人能告诉我我做错了什么吗?
MySQL 100%工作:
SELECT `availables`.*
FROM `availables`
INNER JOIN `rooms` ON `rooms`.id = `availables`.room_id
WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24')
GROUP BY availables.bookdate
ORDER BY availables.updated_at
Run Code Online (Sandbox Code Playgroud)
PostgreSQL错误:
ActiveRecord :: StatementInvalid:PGError:错误:列"availables.id"必须出现在GROUP BY子句中或用于聚合函数:
SELECT"availables".*FROM"availables"INNER JOIN"rooms"ON"rooms". id ="availables".room_id WHERE(rooms.hotel_id = 5056 AND availables.bookdate BETWEEN E'2009-10-21'EN'E'2009-10-23')GROUP BY availables.bookdate ORDER BY availables.updated_at
生成SQL的Ruby代码:
expiration = Available.find(:all,
:joins => [ :room ],
:conditions => [ "rooms.hotel_id = ? AND availables.bookdate BETWEEN ? AND ?", hostel_id, date.to_s, (date+days-1).to_s ], …Run Code Online (Sandbox Code Playgroud) 有没有更快的方法将我的生产数据库转移到测试应用程序?
目前我正在使用heroku db:pull我的本地机器,heroku db:push --app testapp但这变得非常耗时.我有一些种子数据,但它不如仅仅使用我的真实数据进行测试那么准确.既然它们都存储在相邻的AWS云中,那么必须有更快的方式来移动数据?
我想过使用heroku包,但是我注意到animate命令已经消失了?
bundles:animate <bundle> # animate a bundle into a new app
Run Code Online (Sandbox Code Playgroud) 我找到了几个解决这个问题的方法,比如这篇文章中的railstat:
我有一堆文章和评论,我想要一个由独特的IP过滤的计数器.完全像Stackoverflow为这篇文章做的.但是当谷歌分析已经为我做这个并且包括大量代码,跟踪独特的IP等时,我并不真正关心像railstat这样的解决方案.我现在的想法是使用Garb或其他一些分析插件可以提取页面统计数据,如果它们比12小时更新某些表格更早,但我还需要一个cache_column.
我假设您可以从Google Analytics中为特定页面提取统计信息,并且每12小时更新一次统计信息?
我想知道为什么这会是一个坏主意,或者有人有更好的解决方案?
谢谢
counter google-analytics ruby-on-rails google-api ruby-on-rails-3
我有一个搜索路线,我想做出单数,但当我指定一个单一的路线,它仍然制作多个控制器路线,这是它应该如何?
resource :search
Run Code Online (Sandbox Code Playgroud)
给我
search POST /search(.:format) {:action=>"create", :controller=>"searches"}
new_search GET /search/new(.:format) {:action=>"new", :controller=>"searches"}
edit_search GET /search/edit(.:format) {:action=>"edit", :controller=>"searches"}
GET /search(.:format) {:action=>"show", :controller=>"searches"}
PUT /search(.:format) {:action=>"update", :controller=>"searches"}
DELETE /search(.:format) {:action=>"destroy", :controller=>"searches"}
Run Code Online (Sandbox Code Playgroud)
多个控制器"搜索"
我只有一条路线......创建一个搜索:
所以我做了: match "search" => "search#create"
如果我仍然想让控制器复数,我只是想知道未来?Rails 3.0.9
我有点困惑,因为似乎application.css包含了两次,一次是它从清单中列出资源然后是缓存.因此,当我删除单个文件时,它似乎仍然在application.css文件中保持活着状态.
/*
*= require twitter/bootstrap
*= require_self
*= require_tree ./common
*= require_tree ./helpers
*/
Run Code Online (Sandbox Code Playgroud)
它按预期工作,并以开发模式输出所有相关的单个文件
# Do not compress assets
config.assets.compress = false
# Expands the lines which load the assets
config.assets.debug = true
Run Code Online (Sandbox Code Playgroud)
<link href="/assets/twitter/bootstrap.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/application.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/common/announcement.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/common/button.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<Blah blah>
Run Code Online (Sandbox Code Playgroud)
这应该是空白的吗?因为我在application.css文件中的所有内容都是清单而没有实际的css,但我得到的所有连接代码都是106kb.
IE如果我删除公共目录中的文件,它不会消失.它不再列在输出中,但css仍然出现在application.css中
我有一个过程,通常需要几秒钟才能完成,因此我尝试使用delayed_job来异步处理它.工作本身运作正常,我的问题是如何轮询工作以确定是否已完成.
我可以通过简单地将它分配给变量来获取delayed_job的id:
job = Available.delay.dosomething(:var => 1234)
+------+----------+----------+------------+------------+-------------+-----------+-----------+-----------+------------+-------------+
| id | priority | attempts | handler | last_error | run_at | locked_at | failed_at | locked_by | created_at | updated_at |
+------+----------+----------+------------+------------+-------------+-----------+-----------+-----------+------------+-------------+
| 4037 | 0 | 0 | --- !ru... | | 2011-04-... | | | | 2011-04... | 2011-04-... |
+------+----------+----------+------------+------------+-------------+-----------+-----------+-----------+------------+-------------+
Run Code Online (Sandbox Code Playgroud)
但是一旦完成作业,它就会删除它,并且搜索完成的记录会返回错误:
@job=Delayed::Job.find(4037)
ActiveRecord::RecordNotFound: Couldn't find Delayed::Backend::ActiveRecord::Job with ID=4037
@job= Delayed::Job.exists?(params[:id])
Run Code Online (Sandbox Code Playgroud)
我是否需要改变这一点,并推迟删除完整的记录?我不知道我怎么能得到它的状态通知.或者正在查看死记录作为完成证明吗?其他人面对类似的事情?
ruby-on-rails backgroundworker push-notification delayed-job ruby-on-rails-3
当我说布局时我并不仅仅意味着视图,我生成那些.在我自己的邮件上,我正在使用默认布局.我在SomeMailer.rb文件中定义
#some_mailer.rb
class SomeMailer < ActionMailer::Base
layout 'sometemplate'
Run Code Online (Sandbox Code Playgroud)
我是否可以通过某种方式为Devise Mailer等人做到这一点?
我最近注意到使用Nokogiri的一些奇怪的事情.我解析过的所有HTML都被赋予了开始和结束<html>以及<body>标签.
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body>\n
Run Code Online (Sandbox Code Playgroud)
我如何防止Nokogiri这样做?
IE,当我这样做:
doc = Nokogiri::HTML("<div>some content</div>")
doc.to_s
Run Code Online (Sandbox Code Playgroud)
要么:
doc.to_html
Run Code Online (Sandbox Code Playgroud)
我得到原件:
<html blah><body>div>some content</div></body></html>
Run Code Online (Sandbox Code Playgroud) 我有一些不会消失的红宝石宝石.
我认为这与我安装它们时有关.偶尔我会忘记在进行gem安装之前使用"sudo",这会导致写入错误,并且我可以收集的内容会将gem的副本放在我的用户目录中,而不是它可以运行的某个地方.但是宝石卸载不起作用.它不断显示在'gem list'中,但不能从gem uninstall或sudo gem uninstall中卸载它.我在'gem environment'中找到路径后尝试直接删除一个gem,但仍然将gem留在列表中.
还可以删除所有宝石并从头开始吗?这些让我疯狂.
我正在运行OS X.
我有一个查询:
SELECT availables.bookdate AS Date, DATEDIFF(now(),availables.updated_at) as Age
FROM availables
INNER JOIN rooms
ON availables.room_id=rooms.id
WHERE availables.bookdate BETWEEN '2009-06-25' AND date_add('2009-06-25', INTERVAL 4 DAY) AND rooms.hostel_id = 5094
GROUP BY availables.bookdate
Run Code Online (Sandbox Code Playgroud)
返回的内容如下:
Date Age
2009-06-25 0
2009-06-26 2
2009-06-27 1
2009-06-28 0
2009-06-29 0
Run Code Online (Sandbox Code Playgroud)
然后,我如何计算返回的行数...(在这种情况下为5)和年龄的和?使用Count和SUM返回一行?
Count SUM
5 3
Run Code Online (Sandbox Code Playgroud)
谢谢