Возможны две проблемы.Во-первых, как вы запускаете Ruby, а во-вторых, как вам требуется ваш модуль.
Во-первых, если вы запускаете Ruby с помощью ruby password_reset.rb
, тогда вы игнорируете Gemfile
.Gemfile
используется только тогда, когда вы используете bundler
, поэтому вы хотите убедиться, что запускаете Ruby, запустив bundle exec ruby password_reset.rb
.Это заставляет компоновщик читать ваш Gemfile и запускать Ruby в этом контексте.
Во-вторых, вы неправильно включили свой модуль в свой файл Ruby.То, что вы добавили гем в свой Gemfile и запустили Ruby с помощью bundler, не означает, что процесс Ruby знает, что вы собираетесь использовать модуль этого гема;он просто делает модуль доступным для использования.Вы можете спросить: «Почему я не должен делать это в Rails?»Поскольку Rails делает это для вас автоматически через config/application.rb
.
Учитывая эти две проблемы, правильный способ достижения вашей цели - настроить приложение следующим образом:
Во-первых, создайте Gemfile
:
# Gemfile
gem 'password_generator', path: '~/workspace/gems/password_generator'
Во-вторых, создайте файл password_reset.rb
:
# password_reset.rb
# Manually require any libraries that this app will use, even if defined in Gemfile
require 'password_generator'
# Call `puts` so something is printed to the console when this app runs
puts PasswordGenerator.generate
В-третьих, запустите bundle install
, чтобы убедиться, что ваш Gemfile
правильно отформатировани для генерации Gemfile.lock
:
⇒ bundle install
Using bundler 1.16.5
Using password_generator 0.1.0 from source at `../../gems/password_generator`
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
В-четвертых, запустите bundle exec ruby password_reset.rb
и просмотрите результат:
⇒ bundle exec ruby password_reset.rb
kpiDfyTxtdAsKmYuZqmK
Все работает, потому что:
- Ruby запускается с Bundler
- Bundler читает ваш Gemfile и делает гем доступным для Ruby
- Ваше приложение требует модуль из гема, прежде чем пытаться использовать модуль