我有一个名为foo.rb的Ruby脚本,我想在bundler环境的上下文中运行它。怎么样?
bundle exec foo.rb
不起作用,因为exec需要一个shell脚本。
答案 0 :(得分:83)
将脚本名称传递给ruby
命令:
bundle exec ruby script_name
如果您还想要Rails环境:
bundle exec rails runner script_name
答案 1 :(得分:2)
例如,我想使用相同版本的Rubocop作为我的Rails应用程序,而不是最新的系统版本,所以在脚本中执行此操作:
require 'bundler'
Bundler.require
# ...
允许我使用我的应用程序版本的rubocop。
答案 2 :(得分:0)
你可以把它变成一个脚本 - 添加
#!/usr/bin/env ruby
到文件的开头,并使其可执行。然后bundle exec foo.rb
将按预期工作。
(这是在unix或OSX上 - 不确定Windows)
请参阅http://bundler.io/v1.15/man/bundle-exec.1.html#Loading
另请参阅https://coderwall.com/p/kfyzcw/execute-ruby-scripts-directly-without-bundler-exec了解如何使用捆绑的依赖项运行ruby脚本,而无需bundle exec
答案 3 :(得分:0)
如果您想创建一个可以在项目内的 bundle 上下文中运行的脚本,您可以以编程方式调用 Bundler。例如,给定一个项目:
foo
├── Gemfile
└── bar
└── baz.rb
您可以将以下内容放在 baz.rb
的顶部以使其能够访问 Gemfile 中的 gem:
#!/usr/bin/env ruby
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
require 'bundler/setup'
# ...etc.
这样,您可以直接调用脚本而无需使用 bundle exec
,而且您也不必从项目目录中调用它。