Ruby gem 与可执行文件的可选运行时依赖性
Optional runtime dependency for Ruby gem with executables
我正在写一个 gem aipp
公开了一些可执行文件,这里没什么特别的:
#!/usr/bin/env ruby
require 'aipp'
AIPP::NOTAM::Executable.new(File.basename([=12=])).run
部分 gem 可选择使用数据库适配器(pg 或 ruby-mysql gem)。但是由于在云上使用 gem 时这些可能会很麻烦,所以我真的想让它们成为可选的并且不需要它们作为 .gemspec
.[=19 中的运行时依赖项=]
所以我在运行时有条件地要求它们:
require 'pg' if ENV['AIPP_POSTGRESQL_URL']
require 'mysql' if ENV['AIPP_MYSQL_URL']
不幸的是,这没有按预期工作。当设置了任何一个环境变量并使用了可执行文件时,require 失败——可能是因为没有声明依赖关系。
我试过在可执行文件上使用内联 Gemfile,如下所示。在开发中工作(回购结帐),但在通过 Rubygems 安装 gem 时不工作:
#!/usr/bin/env ruby
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'aipp'
gem 'pg', '~> 1' if ENV['AIPP_POSTGRESQL_URL']
gem 'ruby-mysql', '~> 3' if ENV['AIPP_MYSQL_URL']
end
AIPP::NOTAM::Executable.new(File.basename([=14=])).run
要求 gem 的正确方法是什么,这些 gem 未被列为运行时依赖项,但额外安装(通过 gem install
或 Gemfile
)?
也许有人知道现有的 gem 已经以某种方式解决了这个问题。
感谢您的帮助!
我会用bundler groups。
gemfile do
source 'https://rubygems.org'
gem 'aipp'
group :database do
gem 'pg', '~> 1'
gem 'ruby-mysql'
end
end
在 link 中有更多关于如何使用它们的信息。
我正在写一个 gem aipp
公开了一些可执行文件,这里没什么特别的:
#!/usr/bin/env ruby
require 'aipp'
AIPP::NOTAM::Executable.new(File.basename([=12=])).run
部分 gem 可选择使用数据库适配器(pg 或 ruby-mysql gem)。但是由于在云上使用 gem 时这些可能会很麻烦,所以我真的想让它们成为可选的并且不需要它们作为 .gemspec
.[=19 中的运行时依赖项=]
所以我在运行时有条件地要求它们:
require 'pg' if ENV['AIPP_POSTGRESQL_URL']
require 'mysql' if ENV['AIPP_MYSQL_URL']
不幸的是,这没有按预期工作。当设置了任何一个环境变量并使用了可执行文件时,require 失败——可能是因为没有声明依赖关系。
我试过在可执行文件上使用内联 Gemfile,如下所示。在开发中工作(回购结帐),但在通过 Rubygems 安装 gem 时不工作:
#!/usr/bin/env ruby
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'aipp'
gem 'pg', '~> 1' if ENV['AIPP_POSTGRESQL_URL']
gem 'ruby-mysql', '~> 3' if ENV['AIPP_MYSQL_URL']
end
AIPP::NOTAM::Executable.new(File.basename([=14=])).run
要求 gem 的正确方法是什么,这些 gem 未被列为运行时依赖项,但额外安装(通过 gem install
或 Gemfile
)?
也许有人知道现有的 gem 已经以某种方式解决了这个问题。
感谢您的帮助!
我会用bundler groups。
gemfile do
source 'https://rubygems.org'
gem 'aipp'
group :database do
gem 'pg', '~> 1'
gem 'ruby-mysql'
end
end
在 link 中有更多关于如何使用它们的信息。