#ruby
#ruby
Вопрос:
В программе ruby есть отдельный файл Gem, который содержит следующие определения:
source "https://rubygems.org"
gem "typhoeus"
gem "json"
gem "pg"
gem "google_drive" , "2.1.11"
gem "mandrill-api"
Если мне по какой-то причине не нужен этот gem-файл, то в ruby script мне нужно добавить require для всех библиотек,
например:
require typhoeus
require json
require pg
require google_drive, 2.1.11
require mandrill-api
сработает ли это?
Ответ №1:
Назначение Gemfile может быть полезным, чтобы вы могли гарантировать, что ваш код будет работать, используя bundler, который позволяет вам запускать bundle install
, который установит драгоценные камни для работы с текущей версией ruby, которую вы будете использовать для своего кода. Он также добавит Gemfile.lock
файл, который неплохо зафиксировать в вашем управлении версиями, чтобы убедиться, что у вас есть рабочий стек, в котором gems и версия ruby совместимы.
Если вам требуются только файлы в вашем скрипте, нет гарантии, что драгоценные камни действительно установлены в области выполнения этого скрипта. Итак, имея Gemfile
и Gemfile.lock
и используя bundler, вы можете обеспечить переносимость вашей кодовой базы.
Обновить
Согласно комментарию @engineersmnky , вы можете указать версию gem, однако, с этим синтаксисом, и он должен работать до тех пор, пока эти драгоценные камни установлены. Сначала вам нужно убедиться, что вы установили версию в свой терминал:
gem install google_drive -v 2.1.11
Тогда вы можете сделать это в своем файле ruby
require 'rubygems'
gem 'google_drive', '2.1.11';
require 'google_drive'
require 'typhoeus'
require 'json'
require 'pg'
require 'mandrill-api'
Комментарии:
1.Однако вы можете использовать
rubygems
иgem
метод без Gemfile для указания заданной версии, например,require 'rubygems'; gem 'google_drive', '2.1.11'; require 'google_drive'
в этом случае версия будет поддерживаться благодаря исправлениям, внесенным вKernel
rubygems
исходный код2. @engineersmnky попробовал это в irb и получил
Gem::MissingSpecVersionError: Gem::MissingSpecVersionError
3. У вас действительно установлен этот gem? Вам все равно нужно
gem install xxx
точно так же, как вам нужно было бы сделать для require естественным образом. Я хотел сказать, что вы можете указать версию с помощьюrubygems
4. @engineersmnky да, я установил gem перед запуском вашего кода в консоли.
5. @engineersmnky да, это работает, когда я указываю версию с
gem install google_drive -v 2.1.11
спасибо, я обновил ответ.