我正在将我的应用程序从ruby 1.8.7迁移到1.9.3(以及稍后升级Rails).但是我在登录1.9.3时遇到了一些问题.在控制台或服务器启动时,在environment.rb中使用以下代码
logfile = File.open(File.join(RAILS_ROOT,'/log/call_log.log'), 'a')
CALL_LOGGER = AuditLogger.new(logfile)
CALL_LOGGER.info "CALL_LOGGER: Server started."
Run Code Online (Sandbox Code Playgroud)
我明白了
/usr/local/rvm/scripts/irbrc.rb:32:in `write': not opened for writing (IOError)
Run Code Online (Sandbox Code Playgroud)
AuditLogger定义如下:
class AuditLogger < Logger
def format_message(severity, timestamp, progname, msg)
"#{timestamp.strftime("%Y-%m-%d %H:%M:%S")} #{progname} #{severity} #{msg}\n"
end
end
Run Code Online (Sandbox Code Playgroud)
如果我用irb手动执行此操作,则可行
1.9.3-p551 :006 > logfile = File.open(File.join('/var/my_app/log/call_log.log'), 'a')
=> #<File:/var/my_app/log/call_log.log>
=> #<AuditLogger:0x00000001ad95e8 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x00000001ad95c0 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x00000001ad9570 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<File:/var/my_app/log/call_log.log>, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x00000001ad9548 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x00000001ad94f8>>>>
1.9.3-p551 :011 > CALL_LOGGER.info "CALL_LOGGER: Server started."
=> true
Run Code Online (Sandbox Code Playgroud)
我怀疑这个班级可能被另一个班级覆盖了吗?所以我添加了一些代码来确定当前使用的文件的类
@file.class.ancestors
[File, IO, File::Constants, Enumerable, Object, …Run Code Online (Sandbox Code Playgroud)