ruby-on-rails 无法读取映像路径:没有这样的文件或目录@ rb_sysopen - /assets/

s3fp2yjn  于 2023-01-03  发布在  Ruby
关注(0)|答案(1)|浏览(107)

我的assets/images文件夹中有一个名为test.jpg的映像。

    • 我正在尝试读取控制器中的图像:**
image_path = ActionController::Base.helpers.asset_path("test.jpg")
    image_data = File.read(image_path)

出现以下错误:

No such file or directory @ rb_sysopen - /assets/test-80cc818a7ee3f5d3cab23996fb09f4685b38b78258084a1ff23eca1c626646f6.jpg

有什么想法吗?为什么它要把那个代码附加到我的图片网址上?我能去掉它吗?这样它就可以读取原始的图片网址了?
谢谢!

lmyy7pcs

lmyy7pcs1#

因此,asset_path基本上返回相对于根域的URL路径-即"/assets/test-{SHADigest}.jpg"
这个路径不是File.read可以接受的文件系统的路径,因此,在unix系统上,你试图访问/assets/xyz的文件系统,就像/home/xyz-path一样。
您可以做的是从文件系统或原始文件中读取(忽略资产管道可能设置或未设置的任何操作)

image_path = Rails.root.join("assets", "images", "test.jpg")
image_data = File.read(image_path) # Maybe check with File.exist?(image_path) as well.

或者,您可以使用任何HTTP客户端工具(RestClient、Net::HTTP或类似工具)从它自己的Web服务器读取,并使用asset_url代替asset_path
这在rails控制台中不起作用,除非服务器“意外”运行,并且可以从运行rails控制台的config.asset_host上访问。

相关问题