rake 任务在另一个项目中执行捆绑安装
rake task to perform bundle install in another project
如何将 rake 任务写入 运行 不同项目中的捆绑包安装?我用 rake 创建了一个项目,并编写了这样的任务
task :bundle do
projects.each do |name, repo|
if Dir.exists?("../#{name}")
exec("cd ../#{name} && bin/bundle install")
end
end
end
但是当我 运行 我得到:
Using rake 10.3.2
Using bundler 1.9.6
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
乍一看还不错,但实际上是当前仅抽取项目的 bundle install
,而不是目标 rails 项目。
我也试过反勾
puts `cd ../#{name} && bin/bundle install`
但它做了同样的事情。我也试过 bundle install
而不是 bin/bundle install
,但它没有用。
当我 运行 它直接在命令上时,它会按照我的期望进行操作:
Using rake 10.4.2
Using CFPropertyList 2.3.1
...
...
Using turbolinks 2.5.3
Using uglifier 2.7.1
Bundle complete! 34 Gemfile dependencies, 120 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
如何让它做正确的事情 bundle install
?
有几点需要注意
bin/bundle
仅当 bundle
文件存在于 bin
目录
中时才有效
- 在 shell 中有许多不同的方法可以执行命令
exec('echo "Hello World"')
- 运行命令并用它替换当前进程。
system('echo "Hello World"')
- 在 subshell 中运行命令并捕获退出状态代码
`echo "hello world"`
- 在 subshell 中运行命令并捕获所有输出到 STDOUT 和 STDERR,但不包括退出状态代码。
为什么它不起作用
您需要为捆绑器提供一个干净的环境,以便它知道您正在捆绑一个不同的项目。按照下面的
用 Bundler.with_clean_env
块包围你的 rake 任务中的命令
task :bundle do
Bundler.with_clean_env do
projects.each do |name, repo|
if Dir.exists?("../#{name}")
exec("cd ../#{name} && bundle install")
end
end
end
end
如何将 rake 任务写入 运行 不同项目中的捆绑包安装?我用 rake 创建了一个项目,并编写了这样的任务
task :bundle do
projects.each do |name, repo|
if Dir.exists?("../#{name}")
exec("cd ../#{name} && bin/bundle install")
end
end
end
但是当我 运行 我得到:
Using rake 10.3.2
Using bundler 1.9.6
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
乍一看还不错,但实际上是当前仅抽取项目的 bundle install
,而不是目标 rails 项目。
我也试过反勾
puts `cd ../#{name} && bin/bundle install`
但它做了同样的事情。我也试过 bundle install
而不是 bin/bundle install
,但它没有用。
当我 运行 它直接在命令上时,它会按照我的期望进行操作:
Using rake 10.4.2
Using CFPropertyList 2.3.1
...
...
Using turbolinks 2.5.3
Using uglifier 2.7.1
Bundle complete! 34 Gemfile dependencies, 120 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
如何让它做正确的事情 bundle install
?
有几点需要注意
bin/bundle
仅当 bundle
文件存在于 bin
目录
- 在 shell 中有许多不同的方法可以执行命令
exec('echo "Hello World"')
- 运行命令并用它替换当前进程。system('echo "Hello World"')
- 在 subshell 中运行命令并捕获退出状态代码`echo "hello world"`
- 在 subshell 中运行命令并捕获所有输出到 STDOUT 和 STDERR,但不包括退出状态代码。
为什么它不起作用
您需要为捆绑器提供一个干净的环境,以便它知道您正在捆绑一个不同的项目。按照下面的
用Bundler.with_clean_env
块包围你的 rake 任务中的命令
task :bundle do
Bundler.with_clean_env do
projects.each do |name, repo|
if Dir.exists?("../#{name}")
exec("cd ../#{name} && bundle install")
end
end
end
end