Ruby on rails Rails vs Rake[Ruby on Rails] ruby中的命令rake和rails有什么区别 哪一个更快?为什么
是一个用Ruby实现的类似Make的程序Ruby on rails Rails vs Rake[Ruby on Rails] ruby中的命令rake和rails有什么区别 哪一个更快?为什么,ruby-on-rails,ruby,Ruby On Rails,Ruby,是一个用Ruby实现的类似Make的程序 rails是一个web框架,它还具有一些rake任务 这意味着您可以有一个带rake但不带rails的ruby程序,而不是相反 rake本身会更快,因为您不需要加载整个rails应用程序 但在启动rake任务时,它可能具有依赖性,例如rails应用程序中的:environment依赖性,它告诉rake根据当前环境加载rails环境和相当一部分应用程序 在这种情况下,rake任务的初始化可能需要与rails命令一样长的时间 请不要认为实际的任务运行也要考虑
rails
是一个web框架,它还具有一些rake任务
这意味着您可以有一个带rake但不带rails的ruby程序,而不是相反
rake本身会更快,因为您不需要加载整个rails应用程序
但在启动rake任务时,它可能具有依赖性,例如rails应用程序中的:environment
依赖性,它告诉rake根据当前环境加载rails环境和相当一部分应用程序
在这种情况下,rake任务的初始化可能需要与rails命令一样长的时间
请不要认为实际的任务运行也要考虑在内,它可能很短或需要几分钟
例如,
rake db:migrate
,这是默认情况下可用的rails任务,在数据库上运行迁移,如果数据库已经填充和/或您有大量迁移,这可能会很费时
如果在Rails应用程序根目录中调用bundle exec which rake
,您会得到类似/home/[USERNAME]/.rbenv/versions/2.5.5/bin/rake
的内容,对于bundle exec which Rails
,您会得到/home/[USERNAME]/.rbenv/versions/2.5.5/bin/Rails
。从那里,您可以cat
(cat/home/[USERNAME]/.rbenv/versions/2.5.5/bin/rake
)这两个路径都可以看到为每个路径运行类似的代码,但文件的结尾不同
轨道
gem“railties”,版本
加载Gem.bin_路径(“railties”,“rails”,版本)
耙
gem“rake”,版本
加载Gem.bin_路径(“rake”,“rake”,版本)
在这里,它们都在Gem.bin_path
上调用load
,但使用不同的参数,试图在中加载单独的Gem。您可以通过运行irb/pry/rails控制台进一步跟踪代码,并设置所需的require'rubygems'
和version=“>=0.a”
,然后运行Gem.bin_路径(“railties”,“rails”,version)
和Gem.bin_路径(“rake”,“rake”,version)
,以查看load
实际运行的是什么。我承认,在您遇到最终识别传递给rails
的rake任务参数的逻辑之前,它会变得有点像兔子洞,接下来就是rake和stop,并遵从它
当运行rails
并传递要由rake
运行的参数时,它将首先尝试查找它是否是要提供给rails
命令的实际参数,确定它不是,然后尝试将其作为rake
命令运行,以简化Rails团队在Rails v4中添加的整体命名
那么哪个跑得更快呢
rake
用于实际的rake任务,因为它将绕过额外的逻辑,需要确定它正在被传递rake
参数。但是,rails
特定参数不能与rake
一起运行,例如,bundle exec rake generate
将不起作用(除非您有generate
任务)。如果有疑问,请运行bundle exec rails--help
,至少在rails v5中,它将输出哪些参数是rails
特定的,哪些是rake
特定的。rails task\u name
是rake task\u name
的包装器。这一切都是为了方便,也就是说,一个二进制文件可以处理好几件事情。就我个人而言,我不喜欢这种“瑞士军刀”的做法。当我想运行rake任务时,我使用rake
。谢谢,你能告诉我哪一个更快吗?我能用rails/rake两个命令跟踪任务的时间吗?你可以使用time rails task\u name
与time rake task\u name
,请看–差别可能可以忽略不计。谢谢,现在明白了。谢谢,但我不明白在rails环境中哪个更快?