【发布时间】:2013-01-05 19:55:23
【问题描述】:
我有一个 ruby 脚本 (.rb),它打开一个文件并在一些解析后生成一个 csv 文件。
我独立维护脚本,可能会在其他应用程序中使用。
现在我只是将代码复制并粘贴到我的控制器中...我知道这不对!
我应该如何将此 ruby 脚本合并到我的应用程序中?
我要把它变成宝石吗?
谢谢。
【问题讨论】:
标签: ruby-on-rails ruby plugins gem
我有一个 ruby 脚本 (.rb),它打开一个文件并在一些解析后生成一个 csv 文件。
我独立维护脚本,可能会在其他应用程序中使用。
现在我只是将代码复制并粘贴到我的控制器中...我知道这不对!
我应该如何将此 ruby 脚本合并到我的应用程序中?
我要把它变成宝石吗?
谢谢。
【问题讨论】:
标签: ruby-on-rails ruby plugins gem
使其成为 gem 并安装它是一种选择。否则,将文件的目录注册为加载路径。那部分可能取决于操作系统。例如,使用 Ubuntu Linux,我在终端中执行:
export RUBYLIB=path_to_the_directory_where_the_file_is
然后,require 该文件并使用它。当你希望你的库根据是直接从命令调用还是从另一个 ruby 脚本调用而表现不同时,常见的方法是在你的库中编写:
if __FILE__ == $0
commands_to_execute_when_called_directly_from_command
end
【讨论】:
我们一直在编写基于 Ruby 的小型命令行工具,并将它们视为常规的 Linux 应用程序。使用反引号或%x 调用它们很简单,或者像使用常规应用程序一样使用常规管道 (|) 链接它们。
如果我们要抛出大量数据,我们通常会使用 OptionParser 添加一个 --json 标志,它允许我们将 JSON 发送到调用程序,从而更容易重用数据而不是让解析 CSV 或列数据。
您可以在 *nix 系统上的 /usr/local/bin 中安装这类应用程序,确保路径设置为在那里搜索,然后在 shell、Ruby 或任何其他能够使用子 shell 的语言之间共享代码.
仅仅因为它们是用 Ruby 编写的,并不意味着它们必须是 gem 或模块。 Ruby 的功能远不止这些,并且非常适合通常的宿主生态。
【讨论】: