【问题标题】:How to access a file(png file) generated by a gem in my rails application?如何在我的 Rails 应用程序中访问 gem 生成的文件(png 文件)?
【发布时间】:2023-03-22 05:11:01
【问题描述】:

您好,我正在编写一个 gem 和一个使用该 gem 的 rails 应用程序。

gem 根据传递的值生成一个图像文件。(我正在将它写在 gem 的根目录中)

在我的 rails 应用程序中,我想访问该图像文件。我怎样才能做到这一点。

为了实现这一点,我应该在 gem 和 rails-app 中进行哪些修改?

【问题讨论】:

  • 你想用这个文件做什么?您可以简单地使用 File.open(file_path) 打开一个文件,它的确切位置并不重要,但取决于您想要做什么以及服务器的设置方式,可能存在权限问题。无论如何,gems 根目录并不是存储文件的正确位置。
  • 这是一张图片。我想在我的 Rails 应用程序的网页中显示它
  • 在这种情况下,您甚至不必从 Raiuls 代码“访问”它。您只需将其存储在公共文件夹(或公共的某些子文件夹,如 /images)中,它就可供外部使用。因此,您只需要修改此 gem,以便将其存储在正确的位置。
  • 在编写 gem 时,让 gem 的最终用户选择写入文件的位置似乎是最明显的。如果 gem 是独立的,那应该是任何路径(在写入图像之前作为参数传入),并且 Rails 应用程序需要管理它的去向。如果它是 Rails 插件,那么 gem 可以向 Rails 或 Rails 配置询问正确的位置。

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 rubygems


【解决方案1】:

来自Rails Guide

7 为您的 Gem 添加资产

资产也可以以宝石的形式来自外部来源。

jquery-rails gem 就是一个很好的例子,它作为标准 JavaScript 库 gem 随 Rails 一起提供。这个 gem 包含一个继承自 Rails::Engine 的引擎类。通过这样做,Rails 会被告知此 gem 的目录可能包含资产,并且此引擎的 app/assetslib/assetsvendor/assets 目录将添加到 Sprockets 的搜索路径中。

所以基本上,创建vendor/assets/your-image.jpg 然后你想要类似的东西:

lib/jquery/rails/engine.rb

module Jquery
  module Rails
    class Engine < ::Rails::Engine
    end
  end
end

在您的视图中,使用资产助手,例如:

<%= image_tag 'your-image.jpg' %>

【讨论】:

    猜你喜欢
    • 2019-12-08
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2013-07-06
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多