我理解“bundle exec”正在指示捆绑器在给定目录和 gemfile 的上下文中执行某些操作。
但是
bundle exec rake
和bundle exec rackup
有什么区别?
另外,在
bundle exec rackup
的情况下,执行流程的开始是什么?
它们是不同的工具。
rackup 是运行 Rack 应用程序的有用工具,它使用 Rack::Builder DSL 来轻松配置中间件和构建应用程序。 rackup 自动找出它运行的环境,并以 FastCGI、CGI 或 WEBrick 的形式运行您的应用程序 — 所有这些都来自相同的配置。
要运行 Rack 应用程序,您可以将路径作为参数传递给它:
bundle exec rackup yourapp.ru
或者使用应用程序初始化创建 config.ru
文件,然后运行 bundle exec rackup
。
这是最小的 Rack 应用程序:
run ->(env) { [200, {'Content-Type' => 'text/html'}, ['Hi Mugen']] }
UPD
正如 @tadman 在下面的评论中提到的那样
bundle exec
只是加载 Gemfile
中的内容并准备环境。此外,根据您的设置,您可以运行 rake
和 rackup
,而无需使用 bundle exec
命令。
我在这里看到四个重叠的问题:
bundle exec <whatever>
?
/usr/bin/<whatever>
...或者.../usr/bin/env <whatever>
exec
是bundle的关键字,可以被它理解<whatever>
只是一个名字bundle exec
bundle exec
<whatever>
和rake
有什么共同点?
它们是两个不相关的工具,恰好是用 Ruby 编程的rackup
启动
bundle exec ...
有什么作用?
它是一个类似rake
的工具它可以制作成例如启动 C 编译器来编译一些代码
make
make
有什么作用?
它启动具有特定配置的(预安装的)网络服务器
rackup
rack
config.ru