我是ruby和rails的新手。我习惯于在IDE(Xcode,Visual Studio等)中工作,在那里我可以执行项目范围/工作区范围的“构建/编译”操作。
假设我在rails项目中修改了一些ruby文件。我还没有编写能够完成所有修改的测试。
有没有办法确保我的所有* .rb文件在运行时不直接运行它们进行编译?我真的只想执行“编译所有我的ruby / erb文件”操作,以便我知道我目前没有任何语法错误。
更新
我可能应该提到我已经专业编写了20年的代码。我意识到Ruby不像C ++那样编译,但这并不意味着它的语法无法检查。就我而言,我决定使用ruby-lint来捕获基本的语法错误,而不必在运行时运行代码。
答案 0 :(得分:12)
如果您使用的是Linux或Mac或带有gnu find命令的搞笑Windows框,您可以执行以下操作:
find /your/application_directory -name=*.rb -exec ruby -c {} \;
这将在app目录中找到所有ruby脚本并在其上运行ruby -c
,如果脚本中存在错误,将运行语法检查并使用Syntax OK
或错误消息进行响应。
您还可以为编辑器创建一个宏,这样当您保存或按下组合键时,它将在文件上运行ruby -c并为您提供结果。在vim中,您可以在.vimrc中使用它:
map <Leader>c :w !ruby -c<cr>
使用ruby -c
映射Leader-c来编写文件并检查其语法。
验证rake-tasks和视图的语法错误可能有点棘手,但许多像haml这样的模板引擎都有类似的-c语法检查参数。
答案 1 :(得分:2)
为什么不能继续使用像RubyMine(或其父,IntelliJ)这样的IDE?
还有一些文本编辑器插件可以突出显示语法问题,但是谁知道你在使用什么。我使用Sublime Text 2进行非IDE开发,它支持多种自动linting。和Emacs一样,但我猜你不会去那里。
无论你是否使用“真正的”TDD,你需要加强你的代码编写周期并逐步增加工作,这样你就没有机会在第一次累积这样的高级(低级别?)错误但是,地方。无论语言或环境如何,都是如此。
答案 2 :(得分:1)
你甚至可以做
find . -type f -name '*.rb' -or -name '*.ru' -or -name '*.rake' > /tmp/list.txt
while read file ; do
ruby -c $file
done < /tmp/list.txt
检查整个项目
答案 3 :(得分:1)
这是来自@Zac评论的单行答案,我已将其作为答案包括在内,因为并非所有时间我们都阅读了评论:
find . | grep ".*\.rb$" | xargs -L 1 ruby -c
答案 4 :(得分:-4)
Ruby是一种解释性语言。没有编译步骤。请在编写代码之前按照TDD并编写测试。
<强>更新强>
由于这个答案被接受,我不能删除它,除非OP接受另一个答案但是人们通过谷歌搜索登陆这里,请看其他答案。这更像是一句诙谐的言语而不是答案。 Ruby社区拥有很棒的工具,可以进行各种静态代码分析,比如Rubocop和朋友。至少,ruby -c
将完成OP想要的目标。