如何设置一个基本的ruby项目?
我想创build一个10-20个类/文件的小ruby项目。 我需要一些gem,我想使用rspec作为testing框架。
之后我可能会想要创build一个gem,但这并不确定。
是否有一些Howto或指南,告诉我如何设置我的项目的基本结构?
我有的问题是:
- 我在哪里把我所有的自定义错误/例外
- 是否有一些约定名称像lib,bin,src等命名?
- 我在哪里把testing数据或文件。
- 我在哪里需要我所有的文件,所以我可以在我的项目中访问他们。
我知道我可以从零开始做所有事情,但我希望得到一些指导。 我可以复制一些好的gem,但我不确定我真正需要什么,我可以删除什么。
我看了一下http://gembundler.com/ ,但是在设置bundler后停止了。
要获得良好的开始,可以使用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
- testing数据或文件进入
spec/fixtures/
- 要求
lib/my_lib.rb
所有ruby文件。 您也可以根据自己的喜好定义您的例外文件,也可以在自己的文件中定义。 - C源文件进入
ext/my_lib
- shell脚本和可执行文件进入
bin
如有疑问,只要看看其他gem是如何摆放的。
更多信息:
您应该在您的gemspec中添加rspec作为开发依赖项,以使其他开发人员更容易
- 编辑my_lib.gemspec,在底部附近添加
gem.add_development_dependency 'rspec'
和gem.add_development_dependency 'rake'
。 - 添加
Bundler.setup
并且require 'my_lib'
到spec / spec_helper.rb的顶部,以确保您在运行规格时加载了您的gem依赖项。 - 将
require "rspec/core/rake_task"
和task :default => :spec
到您的Rakefile,以便运行rake
将运行您的规格。
当您正在处理最新的创build时, 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
进一步参考
- Rubygems模式指南 (和主页 ),来自Matheus Moreira的回答。 他们真的很好的参考
- 我如何开始由史蒂夫Klabnik
- 练习46:从Zed Shaw 学习Ruby的 一个项目骨架
- Railscasts上的Bundlevideo新gem
- 文档
在rubygems.org上有一些很好的指南,它会向你介绍这些约定和其中一些背后的原因。 通常,大多数Ruby开发人员都遵循Rubygems命名和目录约定 。
如果我无法在标准库中find任何适合错误描述的类,我只会创build自定义的exception类。 把你的错误类嵌套在引发它的类或模块之下:
class Parser::Error < RuntimeError; end begin Parser.new(:invalid).parse! rescue Parser::Error => e puts e.message end
如果你使用的是Test::Unit
,unit testing可以进入/test
,如果你使用RSpec
,unit testing可以进入/test
/spec
。 我推荐后者。
Bundler
是pipe理负载path的好方法。 它将自动设置您的环境,只有在Gemfile
和gemspec
指定的依赖关系。 它也可以让你轻松地require
你的代码,而不使它成为一个gem。
不过,由于您将来可能会将您的代码绑定在gem中,因此我build议您研究如何创buildgem规格 。 你应该手动编写你的规范。 不要使用一些工具来自动生成它 – 在我看来,它们是暴力破解方法,在使用源代码控制时会不必要地复制信息并造成严重破坏。
我创造了一个你可能会觉得有用的gem 。 给定一个gemspec
文件,它定义了许多有用的Rake
任务来处理你的gem,其中包括用自动版本标记来构build,安装和发布你的gem到rubygems
和git
仓库的任务。 它还提供了一个简单的方法来加载你的代码在irb
或pry
会话中。
# Rakefile require 'rookie' # Run `rake -T` for the complete task list Rookie::Tasks.new('your_gem.gemspec').define_tasks!
以下是我经常看到的约定(假设你的项目名称是“foo”):
- /lib/foo.rb – 定义项目的顶级命名空间及其版本; 需要所需的文件。
- / lib / foo / – 包含您的项目的所有类,包括错误相关的类。
- / test / – 包含您的项目的testing。
- / spec / – 包含您的项目的规格。
- / bin / – 如果你的项目依赖于二进制文件(JAR文件等),他们通常在那里。
在lib /里面,约定通常是为顶层命名空间中的每个子命名空间创build一个文件夹。 例如,类Foo :: Bar :: Baz通常位于/lib/foo/bar/baz.rb下。
有些人喜欢创build一个/lib/foo/version.rb文件来设置Foo :: VERSION常量,但是我经常在/lib/foo.rb文件中看到这个文件。
另外,如果你正在创build一个gem,你将需要以下文件:
- / Rakefile – 定义rake任务(比如用于testing,构build和推送gem的任务)。
- / Gemfile – 定义gem的来源(以及其他可能的事情)。
- /foo.gemspec – 描述你的gem并提供一个依赖关系列表。
互联网上有一些关于如何构buildRuby项目的指南。 另外,我认为解决这个问题的最好方法是通过github来寻找一些着名的Ruby项目,并检查“他们”的结构。
除了一般的rubygem的要求,我build议以下工具更好的工作stream程:
- editorconfig ,帮助开发人员在不同的编辑器和IDE之间定义和维护一致的编码风格。
- rubocop ,ruby的静态代码分析器,ruby社区中的lintec。
- 警卫 ,连同一堆插件,当代码改变时,你可以随心所欲地运行任何命令。
- 耙 ,各种项目任务的通用驱动程序,如:
-
package
:build立gem包 -
clean
:清理生成的文件 -
test
:运行testing
-
- 码 ,stream行的ruby文档工具。
除了上述所有的工具之外,他们还提供了一些ruby项目的在线服务:
- CI(持续集成)
- 特拉维斯慈
- circleci
- codeship
- 代码审查
- codeclimate
你甚至可以通过http://shields.io/为你的开源项目生成徽章。;
这是我的经验,希望对一些人有帮助。