小槌.net と MySQL 5.7

久々にWeb家計簿の小槌をアップグレードしたら,だいぶかっこいいフロントエンドになっていました.本家のサイトは全然更新されてなくて,v.2.1.3で止まっていますが,GitHub のほうは更新が続いていて,v.2.2.1まで進んでいます.

アップグレードしてほくほくしてたんですが,よくよく log を見ると,エラーがはき出されている.
どうやら,費目入力中に過去の履歴から入力候補を引っ張り出すためのクエリが転んでいるらしい.

F, [2016-12-14T13:33:10.892612 #12662] FATAL -- :
F, [2016-12-14T13:33:10.892756 #12662] FATAL -- : ActiveRecord::StatementInvalid (Mysql2::Error: Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'kozuchi_production.deals.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by: SELECT  account_entries.summary, max(deals.id) as id FROM `deals` inner join account_entries on account_entries.deal_id = deals.id WHERE `deals`.`type` IN ('Deal::General') AND `deals`.`user_id` = 1 AND (account_entries.summary like '昼食%') GROUP BY account_entries.summary ORDER BY deals.id desc LIMIT 5):
F, [2016-12-14T13:33:10.892858 #12662] FATAL -- :
F, [2016-12-14T13:33:10.892942 #12662] FATAL -- : app/controllers/deal_suggestions_controller.rb:23:in `index'

これは,MySQL 5.7 で発生しがちになった問題らしい(参考).うちは 5.7.16-0ubuntu0.16.04.1 なので条件は満たしている.

とりあえず,my.cnf に

[mysqld]
(略)
sql_mode        = "NO_ENGINE_SUBSTITUTION"

とごまかしてクリア.

ほか(あとで整理するかも)

ところで,一件登録するたびに,コミットボタンが無効化されるのなんとかならんの?
あと,明細複数記入で大量に起票したものを,後で日付変更とかしようとするとエラーがでてこける.

F, [2016-12-14T14:40:34.900796 #12662] FATAL -- : RuntimeError (Duplicated line number in debtor entries. [#<Entry::General id: 9030, user_id: 1, account_id: 85, deal_id: 4401, amount: 7300, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 0>, #<Entry::General id: 9036, user_id: 1, account_id: 85, deal_id: 4401, amount: 7300, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 0>, #<Entry::General id: 9031, user_id: 1, account_id: 85, deal_id: 4401, amount: 3000, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 1>, #<Entry::General id: 9038, user_id: 1, account_id: 85, deal_id: 4401, amount: 3000, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 1>, #<Entry::General id: 9032, user_id: 1, account_id: 85, deal_id: 4401, amount: 7300, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 2>, #<Entry::General id: nil, user_id: 1, account_id: 85, deal_id: 4401, amount: 7300, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 2>, #<Entry::General id: 9033, user_id: 1, account_id: 85, deal_id: 4401, amount: 3000, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 3>, #<Entry::General id: nil, user_id: 1, account_id: 85, deal_id: 4401, amount: 3000, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 3>, #<Entry::General id: 9034, user_id: 1, account_id: 85, deal_id: 4401, amount: 7300, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 4>, #<Entry::General id: nil, user_id: 1, account_id: 85, deal_id: 4401, amount: 7300, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 4>, #<Entry::General id: 9035, user_id: 1, account_id: 85, deal_id: 4401, amount: 3000, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 5>, #<Entry::General id: nil, user_id: 1, account_id: 85, deal_id: 4401, amount: 3000, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 5>, #<Entry::General id: nil, user_id: 1, account_id: 85, deal_id: 4401, amount: 7300, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 6>, #<Entry::General id: 9037, user_id: 1, account_id: 85, deal_id: 4401, amount: 3000, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 7>, #<Entry::General id: nil, user_id: 1, account_id: 85, deal_id: 4401, amount: 3000, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 7>, #<Entry::General id: nil, user_id: 1, account_id: 85, deal_id: 4401, amount: 3000, balance: nil, settlement_id: nil, result_settlement_id: nil, initial_balance: false, date: "2016-12-13", daily_seq: 4, linked_ex_entry_id: nil, linked_ex_deal_id: nil, linked_user_id: nil, type: "Entry::General", linked_ex_entry_confirmed: false, summary: "XXX", creditor: false, line_number: 8>]):
F, [2016-12-14T14:40:34.900970 #12662] FATAL -- :
F, [2016-12-14T14:40:34.901027 #12662] FATAL -- : lib/deal.rb:247:in `adjust_entry_line_numbers'
F, [2016-12-14T14:40:34.901109 #12662] FATAL -- : app/controllers/deals_controller.rb:174:in `update'