내 Rails 애플리케이션에서 백그라운드 활동을 추적하기 위해 작성한 클래스입니다.Ruby on Rails가 내 데이터를 저장하지 않는 이유는 무엇입니까?
제 문제는 status
필드가 올바르게 업데이트되었지만 logs
필드가 올바르지 않다는 것입니다. 왜 그런가?
PS1 :이 코드는 rake
를 통해 실행되고 delayed_job
보석 : 내가 루트 디렉토리에서 발견 HTML 파일)
PS2의 목록을 즉, tmp_logs
내가 원하는 데이터가 포함 된 로그를 볼 수 있습니다.
class MaintenanceOperation < ActiveRecord::Base
attr_accessible :logs, :status, :operation
def track_object_elements_in_html
status = "started"
tmp_logs = logs
self.save
begin
nb_files = 0
html_files = File.join(my_root, "**", "*.{html,htm,HTML,HTM}")
Dir.glob(html_files).each do |file|
nb_files += 1
tmp_logs << file << "\n"
logger.debug tmp_logs
end
tmp_logs << "Found #{nb_files} files." << "\n"
self.logs = tmp_logs
self.status = "done"
rescue Exception => e
logger.error "Finished performing maintenance operation with error"
logger.error e.message
e.backtrace.each { |line| logger.error line }
logger.error "Flagging as error"
self.status = "error"
end
self.save
end
end
편집 : logs
을 변경 한 후 저장할 때
내 로그에 빈 트랜잭션을 볼 수 있습니다.
2013-02-18 19:15:28.981 [meh] (0.1ms) begin transaction (pid:80725)
2013-02-18 19:15:28.982 [meh] (0.0ms) commit transaction (pid:80725)
'#save! '를 사용해보세요. 오류가 표시됩니다. (그들은 Ruby 컨벤션에 대해 안전하지 않은 방법이기 때문에 오류시 오류가 발생합니다.) – Reactormonk
오류가 발생하지 않으며 로그에 다음 빈 트랜잭션이 표시됩니다. 2013-02-18 19 : 15 : 28.981 [meh] (0.1ms) 트랜잭션 시작 (pid : 80725) 2013-02-18 19 : 15 : 28.982 [meh] (0.0ms) 커밋 트랜잭션 (pid : 80725) –