如何编写rake任务以在其他项目中运行bundle install?我用rake创建了一个项目,并编写了像这样的任务
setTimeout(
function()
{
fillColorOrPattern('s6image',currentFill);
}, 5);
但是当我跑步时,我得到了:
task :bundle do
projects.each do |name, repo|
if Dir.exists?("../#{name}")
exec("cd ../#{name} && bin/bundle install")
end
end
end
一开始看起来不错,但实际上是当前rake-only项目的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.
而不是目标rails项目。
我也试过了回答
bundle install
但它也是如此。我还尝试了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.
?
答案 0 :(得分:2)
有关此事项的注意事项
bin/bundle
仅在bundle
目录中存在bin
文件时才有效
exec('echo "Hello World"')
- 运行命令并用它替换当前进程。system('echo "Hello World"')
- 在子shell中运行命令并捕获退出状态代码`echo "hello world"`
- 在子shell中运行命令并将所有输出捕获到STDOUT和STDERR,但不捕获退出状态代码。为什么它没有工作
您需要为bundler提供干净的环境,以便它知道您正在捆绑其他项目。使用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