我正在撰寫一個aipp公開一些可執行檔案的 gem,這里沒什么特別的:
#!/usr/bin/env ruby
require 'aipp'
AIPP::NOTAM::Executable.new(File.basename($0)).run
gem 的某些部分可以選擇使用資料庫配接器(pg 或 ruby??-mysql gem)。但是,由于在云上使用 gem 時這些可能會讓人頭疼,所以我真的想讓它們成為可選的,而不是要求它們作為.gemspec.
所以我在運行時有條件地要求它們:
require 'pg' if ENV['AIPP_POSTGRESQL_URL']
require 'mysql' if ENV['AIPP_MYSQL_URL']
不幸的是,這并沒有按預期作業。當設定了任何一個環境變數并使用了可執行檔案時,require 會失敗——可能是因為沒有宣告依賴項。
我已經在可執行檔案上嘗試了一個行內 Gemfile,如下所示。在開發中作業(repo checkout),但在通過 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($0)).run
需要未列為運行時依賴項但額外安裝(通過gem install或Gemfile)的 gem 的正確方法是什么?
也許有人知道已經以某種方式解決了這個問題的現有 gem。
謝謝你的幫助!
uj5u.com熱心網友回復:
我會為此使用捆綁器組。
gemfile do
source 'https://rubygems.org'
gem 'aipp'
group :database do
gem 'pg', '~> 1'
gem 'ruby-mysql'
end
end
鏈接中有更多關于如何使用它們的資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/468348.html
