【问题标题】:How do I set up a basic Ruby project?如何建立一个基本的 Ruby 项目?
【发布时间】:2012-03-03 20:08:58
【问题描述】:

我想创建一个包含 10 ~ 20 个类/文件的小型 Rub​​y 项目。我需要一些 gem,我想使用 RSpec 作为测试框架。

我以后可能想构建一个 gem,但这还不确定。

是否有一些方法或指南告诉我如何设置项目的基本结构?

我的问题是:

  • 我将所有自定义错误/异常放在哪里?
  • 是否有一些用于命名目录(如 lib、bin、src 等)的约定?
  • 我在哪里放置测试数据或文档?
  • 我在哪里需要我的所有文件才能在我的项目中访问它们?

我知道我可以从头开始做任何事情,但我需要一些指导。那里有一些我可以复制的好宝石,但我不确定我真正需要什么以及我可以删除什么。

我查看了http://gembundler.com/,但在设置 Bundler 后它停止了。

【问题讨论】:

标签: ruby project-structure


【解决方案1】:

为了获得良好的开端,您可以使用bundle gem 命令和rspec --init

~/code $ bundle gem my_lib
      create  my_lib/Gemfile
      create  my_lib/Rakefile
      create  my_lib/LICENSE.txt
      create  my_lib/README.md
      create  my_lib/.gitignore
      create  my_lib/my_lib.gemspec
      create  my_lib/lib/my_lib.rb
      create  my_lib/lib/my_lib/version.rb
Initializating git repo in /Users/john/code/my_lib
~/code $ cd my_lib/
~/code/my_lib $ git commit -m "Empty project"
~/code/my_lib $ rspec --init
The --configure option no longer needs any arguments, so true was ignored.
  create   spec/spec_helper.rb
  create   .rspec
  • 代码进入lib
  • 规格进入spec
  • 测试数据或文档进入spec/fixtures/
  • 需要lib/my_lib.rb 中的所有 ruby​​ 文件。您也可以在该文件或它们自己的文件中定义您的例外 - 根据您自己的喜好。
  • C 源文件进入ext/my_lib
  • shell 脚本和可执行文件进入bin

如有疑问,请查看其他宝石的布局。


更多信息:

您应该在 gemspec 中添加 rspec 作为开发依赖项,以便其他开发人员更轻松

  1. 编辑 my_lib.gemspec,在底部附近添加 gem.add_development_dependency 'rspec'gem.add_development_dependency 'rake'
  2. Bundler.setuprequire 'my_lib' 添加到 spec/spec_helper.rb 的顶部,以确保在运行规范时加载您的 gem 依赖项。
  3. require "rspec/core/rake_task"task :default => :spec 添加到您的Rakefile,以便运行rake 将运行您的规范。

在您处理最新作品时,guard-rspec 可以自动在文件更改时运行您的规范,提醒您规范失败,从而节省您的时间和麻烦。

~/code/my_lib $ git add spec/spec_helper.rb
~/code/my_lib $ git commit -am "Add RSpec"
~/code/my_lib $ vim my_lib.gemspec # add guard development dependency
~/code/my_lib $ bundle
~/code/my_lib $ bundle exec guard init
~/code/my_lib $ vim Guardfile # Remove the sections below the top one
~/code/my_lib $ git add Guardfile
~/code/my_lib $ git commit -am "Add Guard"

对自己的创作满意后,将其推送到 github

# create a github repository for your gem, then push it up
~/code/my_lib $ curl -u myusername https://api.github.com/user/repos -d '{"name":"my_lib"}' 
~/code/my_lib $ git remote add origin git@github.com:myusername/my_lib.git
~/code/my_lib $ git push

然后,当您准备好在 Rubygems.org 上发布您的 gem 时,运行 rake release,它将引导您完成这些步骤。

~/code/my_lib $ rake release

更多参考

【讨论】:

  • 您可以使用-b, [--bin=Generate a binary for your library.]bundle gem
  • 您也可以使用bundle gem <gem-name> -t 一次性完成相当于rspec --init 的操作。
  • 如何执行 ruby​​ 项目。我为学生教师时间表构建了一个基于控制台的 ruby​​ 项目。不知道怎么执行??
【解决方案2】:

some nice guides at rubygems.org 将向您介绍约定及其背后的推理。一般来说,Rubygems naming and directory conventions 是大多数 Ruby 开发人员所遵循的。

如果我无法在标准库中找到任何符合错误描述的类,我只会创建自定义异常类。将您的错误类嵌套在引发它的类或模块下:

class Parser::Error < RuntimeError; end

begin
  Parser.new(:invalid).parse!
rescue Parser::Error => e
  puts e.message
end

单元测试进入/test,如果你使用Test::Unit,或者进入/spec,如果你使用RSpec。我推荐后者。

Bundler 是管理加载路径的好方法。它将自动设置您的环境,仅使用在 Gemfile 和可选的 gemspec 上指定的依赖项。它还允许您轻松地require 您的代码,而无需将其设为 gem。

但是,由于您将来可能会将代码捆绑到 gem 中,因此我建议您调查 how to create gem specifications。您应该手动编写规范。不要使用某些工具来自动生成它 - 在我看来,它们是蛮力方法,在与源代码控制一起使用时会不必要地复制信息并造成严重破坏。

I created a gem 你可能会觉得有用。给定一个gemspec 文件,它定义了许多有用的Rake 任务来处理你的gem,其中包括构建、安装和发布你的gem 到rubygemsgit 存储库的任务,并带有自动版本标记。它还提供了一种在irbpry 会话中加载代码的简单方法。

# Rakefile
require 'rookie'

# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!

【讨论】:

    【解决方案3】:

    以下是我最常看到的约定(假设您的项目名称是“foo”):

    • /lib/foo.rb - 定义项目的顶级命名空间及其版本;需要所需的文件。
    • /lib/foo/ - 包含项目的所有类,包括与错误相关的类。
    • /test/ - 包含项目的测试。
    • /spec/ - 包含项目的规范。
    • /bin/ - 如果您的项目依赖于二进制文件(JAR 文件等),它们通常会放在那里。

    在 lib/ 中,约定通常是为顶级命名空间中的每个子命名空间创建一个文件夹。例如,Foo::Bar::Baz 类通常位于 /lib/foo/bar/baz.rb 下。

    有些人喜欢创建 /lib/foo/version.rb 文件只是为了设置 Foo::VERSION 常量,但我经常看到 /lib/foo.rb 文件中定义了这个。

    此外,如果您正在创建 gem,您将需要以下文件:

    • /Rakefile - 定义 rake 任务(例如用于测试、构建和推送 gem 的任务)。
    • /Gemfile - 定义 gem 的来源(以及其他可能的东西)。
    • /foo.gemspec - 描述您的 gem 并提供依赖项列表。

    【讨论】:

      【解决方案4】:

      互联网上有一些关于如何构建 Ruby 项目的指南。此外,我认为解决这个问题的最佳方法是前往 github 并寻找一些著名的 Ruby 项目,并检查“他们的”结构。

      除了一般的 ruby​​ gem 要求外,我推荐以下工具以获得更好的工作流程:

      • editorconfig ,帮助开发人员在不同的编辑器和 IDE 之间定义和保持一致的编码风格。
      • rubocop,ruby 的静态代码分析器,ruby 社区中的 defac。
      • guard 加上一堆插件,你可以在代码变化时自动运行任何你喜欢的命令。
      • rake ,各种项目任务的通用驱动,例如:
        • package: 构建 gem 包
        • clean: 清理生成的文件
        • test:运行测试
      • yard,流行的 ruby​​ 文档工具。

      除了以上所有工具之外,它们是 ruby​​ 项目的一些在线服务:

      您甚至可以通过http://shields.io/ 为您的开源项目生成徽章。

      这是我的经验,希望对大家有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-26
        • 2019-10-30
        • 2019-11-26
        • 1970-01-01
        • 1970-01-01
        • 2021-02-26
        • 1970-01-01
        相关资源
        最近更新 更多