Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails vs Rake[Ruby on Rails] ruby中的命令rake和rails有什么区别 哪一个更快?为什么_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails vs Rake[Ruby on Rails] ruby中的命令rake和rails有什么区别 哪一个更快?为什么

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命令一样长的时间 请不要认为实际的任务运行也要考虑

是一个用Ruby实现的类似Make的程序

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环境中哪个更快?