首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用‘bundler exec`通过rubygems-bundler执行

不使用‘bundler exec`通过rubygems-bundler执行
EN

Stack Overflow用户
提问于 2013-05-27 03:28:35
回答 3查看 1.4K关注 0票数 2

我有一个标准的gem scaffold,在bin目录中有一个简单的可执行文件(bin/do_things.rb):

代码语言:javascript
运行
复制
#!/usr/bin/env ruby
require 'my_gem'
MyGem::doThings()

gem还没有通过gem install安装,所以在没有bundle exec的情况下运行bin/do_things.rb会失败(我的Gemfile中有gemspec行)。

有没有一种简单的方法让rubygems-bundler在bundler上下文中执行我的脚本?我应该只修改我的可执行文件中的$LOAD_PATH吗?

我也可以创建一个在Bundler下执行的包装器脚本,但我更喜欢使用rubygems-bundler。

或者我应该直接输入bundle exec

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-27 12:48:38

尝试:

代码语言:javascript
运行
复制
bundle exec bash -l

它会让你进入bundler上下文--它是一个额外的外壳,所以运行exit会让你回到没有bundler的上下文。

票数 4
EN

Stack Overflow用户

发布于 2013-05-27 03:56:27

更改文件权限

代码语言:javascript
运行
复制
chmod a+x bin/do_things.rb

并解析bin路径,忽略符号链接

代码语言:javascript
运行
复制
require "pathname"
bin_file = Pathname.new(__FILE__).realpath

post,将self添加到libpath

代码语言:javascript
运行
复制
$:.unshift File.expand_path("../../lib", bin_file)
票数 2
EN

Stack Overflow用户

发布于 2013-05-27 04:27:24

通过bundle install --binstubs生成二进制存根将为我的gemspec中列出的所有可执行文件创建一个包装器脚本。

代码语言:javascript
运行
复制
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'do_things.rb' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('my_gem', 'do_things.rb')

但是,默认情况下,二进制存根路径为bin,这与gem的可执行文件路径冲突,并将覆盖bin中的文件。

运行bundle install --binstubs=SOME_DIR,然后将SOME_DIR添加到.gitignore似乎是最易维护的方法。

然后,我可以简单地执行SOME_DIR/do_things或任何其他项目特定的可执行文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16762914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档