Ruby给出了“没有这样的文件或目录 – text.txt(Errno :: ENOENT)”错误

当我试图运行ruby应用程序时,它会给出以下错误,

任何人都可以对它有所启发。

ruby logger.rb /home/swapnasa/Downloads/irclogger-master logger.rb:14:in `read': No such file or directory - ./tmp/logger.pid (Errno::ENOENT) from logger.rb:14:in `' 

代码在这里:

 #!/usr/bin/env ruby puts Dir.pwd $: << File.join(File.dirname(__FILE__), 'lib') require 'irclogger' require 'irclogger/cinch_plugin' require 'redis' pidfile = File.join(File.dirname(__FILE__), 'tmp', 'logger.pid') begin old_pid = File.read(pidfile).to_i Process.kill 0, old_pid raise "An existing logger process is running with pid #{old_pid}. Refusing to start" rescue Errno::ESRCH end File.open(pidfile, 'w') do |f| f.write Process.pid end bot = Cinch::Bot.new do configure do |c| c.server = Config['server'] c.channels = Config['channels'] c.user = Config['username'] c.nick = Config['nickname'] c.realname = Config['realname'] # cinch, oh god why?! c.plugins.plugins = [IrcLogger::CinchPlugin] end end IrcLogger::CinchPlugin.redis = Redis.new(url: Config['redis']) bot.start 

似乎是源于此

 pidfile = File.join(File.dirname(__FILE__), 'tmp', 'logger.pid') 

试试吧

 pidfile = File.join('./tmp', 'logger.pid') 

如果它不存在,还在这里添加一个条件来创建’tmp’文件夹。 当您创建该pid文件时,您可以告诉它创建它所在的任何目录。

pdfile = File.join( Dir::pwd,'lib', 'tmp', 'logger.pid' )

问题很可能是tmp目录不存在。 尝试这样的事情:

 piddir = File.join(File.dirname(__FILE__), 'tmp') Dir.mkdir(piddir) pidfile = File.join(piddir, 'logger.pid') 

如果你添加:

  File.open(pidfile, 'w+') do |f| f.write Process.pid end 

应该自动为您创建文件。 而不是你先创建它。