我有一个Rails 3.0.x应用程序。我想在运行时加载gem,而不使用。
我的目标是像往常一样加载应用程序,让Bundler加载常规的gems。然后,我想加载位于特定目录中的所有gems(Rails Engines),但在运行时之前,我不知道会有哪些gems。
是否有人知道这在Rails中是否可能,也许使用Bundler API?
我有一个Rails 3.0.x应用程序。我想在运行时加载gem,而不使用。
我的目标是像往常一样加载应用程序,让Bundler加载常规的gems。然后,我想加载位于特定目录中的所有gems(Rails Engines),但在运行时之前,我不知道会有哪些gems。
是否有人知道这在Rails中是否可能,也许使用Bundler API?
Gemfile
只是Ruby代码,您可以拥有默认未加载的gem。# In your Gemfile, add at the end:
Dir[YOUR_RAILS_ENGINES_SUBFOLDER + "/*/*.gemspec"].each do |gemspec_file|
dir_name = File.dirname(gemspec_file)
gem_name = File.basename(gemspec_file, File.extname(gemspec_file))
# sometimes "-" and "_" are used interchangeably in gems
# for e.g. gemspec_file is "engines/my-engine/my_engine.gemspec"
# dir_name will be engines/my-engine
# gem_name will be my_engine
# Register that engine as a dependency, *without* being required
gem gem_name, :path => dir_name, :require => false
# e.g. this is similar to saying
# gem 'my_engine', :path => 'engines/my-engine', :require => false
end
bundle install
一次即可。require <your-engine-name>
来在运行时加载任何所选的gem。试试这个:
Bundler.with_clean_env do
# require gems...
end
boot.rb
中,我会收到错误提示:'my_gem' 不是 bundle 的一部分。请将其添加到 Gemfile 中。
- maciej-rosiek# require gems...
是什么意思?也许这就是我缺失的东西? - maciej-rosiek