Category Archives: Code

Rails 4 : Load Seed from TSV


Some days ago, I was requested to enable to load seed data from excel, by my client, in rails 4 project. I told that data to be edited should be managed in database, not excel. But he really requested excel, then I and he decided load data from tsv. Excel is functional, so TSV is appropriate.

Select data area and copy and paste with mouse, Excel data can be pasted as TSV data to text editor, and vise versa.

Environment

  • Ubuntu 14.04 LTS
  • Rails 4.1.8
  • Ruby 2.2.2

Direction

  1. Create feature to load TSV data as a task, and enable to execute with rake.
  2. On executing rake db:seed, execute the task to load TSV.
Continue reading Rails 4 : Load Seed from TSV

Rails 4 Send mail when Error occurs


I wrote code to send mail when error occurs in Rails 4.

Environment

  • Ubuntu 15.05 (64bit)
  • Ruby 2.2.2
  • Rails 4.1.8

Old Way

In Rails 3, I could use rescue_in_public method in ApplicationController and send error notification mail.

current_user returns user who logging in. It’s defined in devise gem.

But in rails 4, it doesn’t work.

Solution

I used rescue_from, which also exists in Rails 3.

rescue_from Exception catches all exception occurs in controller, but rescue_from StandardError doesn’t. It is because RuntimeError, for example, is inherits Exception but doesn’t inherit StandardError, which is raised by raise "exception!" simply. And, syntax error like 0 = 1 couldn’t be caught. Error caught by rescue_from Exception is errors occurs in running program. And errors occur before controller procedure can’t be caught.

The point is raise exception in handle_exception method. I don’t want to erase exception by handle_exception, but want only to send notification mail. It is like AOP. In the above, add method into application_controller.rb simply.

current_user in send_error_mail method returns logging in user, which is defined in the gem, devise. self is used for reporting in which controller the error occurs. request is for reporting request url, etc. The code !Rails.env.development? should be replace to config value. I heard that we can use custom configuration in Rails 4.2, so it is the issue after rails upgrading.

Attention

Exceptions before controller procedure should be reported by other way.

I know handling exception outside of controller is a way, but there are variables can be referred in controller and objects useful in controller, I thought, so I wrote code into applicatoin_controller.rb.

Continue reading Rails 4 Send mail when Error occurs

Simple Rails Log Rotation


Here’s the way of simple log rotation in Rails.

Environment

  • Rails 4.1.8
  • Ruby 2.2.2
  • Ubuntu 15.04 (64bit)

Setting

First, add the following code to config/application.rb.

In the above, log file will be split by 100 MB (104,857,600 bytes) and limit 10 files. Namely, it will save about 1 GB logs. また、 10 ファイル を超えると、古いものから削除されていきます。

Rails can configure logger as daily, weekly, etc., but in that case old log will not be deleted.

Test

Before testing in development environment, create log file with the following command.

bs represents block size, count represents times to write.

And launch server with rails s, access some pages. Then, development.log and development.log.0 will be created.

About Rails logging, you can use the other ways like SyslogLogger and Linux logrotate, for example.