我很想在Bundler中创建一个Gemfile,只需将我自己的个人Gemfiles设置为捆绑...
又称ruby-debug,交互式编辑器等等。
知道怎么做吗?
答案 0 :(得分:2)
我们使用这种技术。 请在你的Gemfile中找到它:
eval File.read(File.expand_path("Gemfile.personal")) if File.exists?(File.expand_path("Gemfile.personal"))
然后将您的个人宝石添加到Gemfile.personal。当然,从版本控制中排除Gemfile.personal。
答案 1 :(得分:2)
这样做的一种方法是创建不同的环境
group :scott do
end
然后
bundle --with-env = scott
答案 2 :(得分:1)
我不是100%确定你想要达到的目标,但是;
如果您只想指定一些仅限开发的gem,您可以指定可以从部署中排除的开发组:
group :development do
gem "ruby-debug"
gem "interactive-editor"
end
然后在生产或测试中你会做:
bundle install --without development
答案 3 :(得分:0)
我的主张不依赖于Bundler。因此,不会使Gemfile*
与您的私人宝石混乱,因为价格不如@ScottSchulthess的回答便宜。
有一个存储在$LOAD_PATH
全局变量中的数组,它是“加载或需要的脚本和二进制模块的加载路径”(参见Ruby docs),Bundler修改了这个数组。
如果您正在开发一个gem $LOAD_PATH
,它将包含系统中所有gem的路径。你可以简单地写一下require "pry"
某处和pry gem将被正确加载,即使它没有在gemspec和Gemfile中提及。您不必将其添加到依赖项。 (当然它必须已经安装gem install pry
。)
Bundler在开发应用程序时采取的一种非常不同的策略。在这种情况下,大多数$LOAD_PATH
将在require bundler/setup
上删除(Rails在config/boot.rb
中调用它)。只有基本路径和那些指向Gemfile.lock
中指定的宝石的路径才会保留。因此,如果您想在不将其添加到Gemfile的情况下使用pry
,则必须在要求之前将其附加到$LOAD_PATH
。
gems_root = $LOAD_PATH.detect{ |p| %r{/bundler-} =~ p}.sub(%r{/bundler-.*}, "")
additional_gems = {
"pry" => "pry-0.10.1/lib",
"pry-rails" => "pry-rails-0.3.2/lib",
}
load_paths = additional_gems.values.map{ |p| File.join gems_root, p }
$LOAD_PATH.unshift *load_paths
additional_gems.keys.each{ |r| require r }
如果您正在使用Rails,请将其保存在/config/initializers/00_custom_gems.rb
中,这就是全部。外部Rails你还需要它,最好是在require "bundler/setup"
之后:
require "path/to/it" if File.exists? "path/to/it"
请记住在.gitignore
中提及此文件。
有时,正确的gem路径不会以/lib
结尾,而是以架构名称结尾。学习它的最简单方法是将它暂时添加到Gemfile中,并在上述初始化程序中执行puts $LOAD_PATH
。你也可以从gemspec学习这些目录。
开发gem时,您不需要增强$LOAD_PATH
,只需要需要的宝石。如果您在测试中需要自定义gem并且正在使用RSpec,则可以在/spec/support
中的某处完成。
另一个(不那么理智)的想法是添加文件lib/development.rb
:
require_relative "my_gem_name"
require "path/to/private/requires" if File.exists? "path/to/private/requires"
并在测试,演示应用程序等中引用此文件而不是“my_gem_name”。
答案 4 :(得分:0)
到目前为止,我找到的最干净的解决方案是使用单独的Gemfile.personal
并使用自定义Gemfile
路径。我喜欢这个解决方案,因为您可以在任何项目中使用它,而无需修改项目代码。
Gemfile.personal
添加到项目根目录# /path/to/your_ruby_project/Gemfile.personal
eval File.read('Gemfile') # use all gems from Gemfile
gem 'personal-gem1'
gem 'personal-gem2'
Gemfile.personal
文件安装gems BUNDLE_GEMFILE="Gemfile.personal" bundle install
# or
bundle install --gemfile=Gemfile.personal
请记住,每次使用捆绑程序执行命令时都要指定BUNDLE_GEMFILE
。
我个人使用dotenv将BUNDLE_GEMFILE=Gemfile.personal
env变量放入.env
文件中,这确保了在我用Gemfile.personal
执行任何命令时始终使用bundler
,因此不需要每次都手动放置。
Gemfile.personal
和Gemfile.personal.lock
放入.gitignore
对于Linux用户:
touch ~/.gitignore
echo "Gemfile.personal\nGemfile.personal.lock" >> ~/.gitignore
这将影响所有项目,因此您无需分别更新每个项目.gitignore
。