How to log something in Rails in an independent log file?

You can create a Logger object yourself from inside any model. Just pass the file name to the constructor and use the object like the usual Rails logger: class User < ActiveRecord::Base def my_logger @@my_logger ||= Logger.new(“#{Rails.root}/log/my.log”) end def before_save my_logger.info(“Creating user with name #{self.name}”) end end Here I used a class attribute to memoize … Read more

Where to define custom error types in Ruby and/or Rails?

For Gems I have seen many times that you define exceptions in this way: gem_dir/lib/gem_name/exceptions.rb and defined as: module GemName class AuthenticationError < StandardError; end class InvalidUsername < AuthenticationError; end end an example of this would be something like this in httparty For Ruby on Rails Put them in your lib/ folder under a file … Read more

Is it secure to store passwords as environment variables (rather than as plain text) in config files?

As mentioned before, both methods do not provide any layer of additional “security” once your system is compromised. I believe that one of the strongest reasons to favor environment variables is version control: I’ve seen way too many database configurations etc. being accidentially stored in the version control system like GIT for every other developer … Read more

do..end vs curly braces for blocks in Ruby

The general convention is to use do..end for multi-line blocks and curly braces for single line blocks, but there is also a difference between the two that can be illustrated with this example: puts [1,2,3].map{ |k| k+1 } 2 3 4 => nil puts [1,2,3].map do |k| k+1; end #<Enumerator:0x0000010a06d140> => nil This means that … Read more