Ruby Require语句和文件位置

时间:2013-01-29 14:09:43

标签: ruby require

我正在尝试在Ruby中使用require命令。我正在使用CodeRunner来运行我的代码。我遇到的问题是require语句只是使用字符串“chunky_png”。我有一个文件夹,里面有这个代码需要使用的库文件。我不确定A)在哪里放文件夹和B)如果我需要以某种方式指向该文件夹?这是我的代码,下面是我得到的错误。我将库文件的文件夹放在与我正在尝试运行的PNGdecode.rb文件相同的文件夹中:

require 'chunky_png'

class ChunkyPNG::Image
  def at(x,y)
    ChunkyPNG::Color.to_grayscale_bytes(self[x,y]).first
  end
end

img = ChunkyPNG::Image.from_file('engine.png')

sobel_x = [[-1,0,1],
           [-2,0,2],
           [-1,0,1]]

sobel_y = [[-1,-2,-1],
           [0 , 0, 0],
           [1 , 2, 1]]

edge = ChunkyPNG::Image.new(img.width, img.height, ChunkyPNG::Color::TRANSPARENT)

for x in 1..img.width-2
  for y in 1..img.height-2
    pixel_x = (sobel_x[0][0] * img.at(x-1,y-1)) + (sobel_x[0][1] * img.at(x,y-1)) + (sobel_x[0][2] * img.at(x+1,y-1)) +
          (sobel_x[1][0] * img.at(x-1,y))   + (sobel_x[1][1] * img.at(x,y))   + (sobel_x[1][2] * img.at(x+1,y)) +
          (sobel_x[2][0] * img.at(x-1,y+1)) + (sobel_x[2][1] * img.at(x,y+1)) + (sobel_x[2][2] * img.at(x+1,y+1))

    pixel_y = (sobel_y[0][0] * img.at(x-1,y-1)) + (sobel_y[0][1] * img.at(x,y-1)) + (sobel_y[0][2] * img.at(x+1,y-1)) +
          (sobel_y[1][0] * img.at(x-1,y))   + (sobel_y[1][1] * img.at(x,y))   + (sobel_y[1][2] * img.at(x+1,y)) +
          (sobel_y[2][0] * img.at(x-1,y+1)) + (sobel_y[2][1] * img.at(x,y+1)) + (sobel_y[2][2] * img.at(x+1,y+1))

    val = Math.sqrt((pixel_x * pixel_x) + (pixel_y * pixel_y)).ceil
    edge[x,y] = ChunkyPNG::Color.grayscale(val)
  end
end
edge.save('engine_edge.png')

错误:

PNGdecode.rb:1:in `require': no such file to load -- chunky_png (LoadError)

1 个答案:

答案 0 :(得分:4)

嗯,实际上chunky_pnggem,即库。你应该通过RubyGems ruby​​包装系统安装它。

首先,如果尚未安装,请安装RubyGems(如果您可以键入gem命令并显示其帮助,请转到第二步)

第二次,使用以下命令安装此 gem

gem install chunky_png

这不仅会下载此库,还会下载其依赖项,安装和配置它们的方式使您可以从任何目录执行require 'chunky_png'而无需使用所有库文件它

这是在Ruby中安装外部库的常用方法。

注意:如果您使用的是Ubuntu Linux系统并且想要在系统范围内安装gem(对于所有用户),您可能希望将后一个命令添加到sudo前面)

注意2:如果您最终要分发需要宝石的Ruby应用程序,最好使用Bundler,以便其他人可以自动安装所有依赖项,而无需需要解析错误消息并逐个手动安装所需的宝石