gpt4 book ai didi

Ruby - 无法使用本地安装的 gem

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:27 24 4
gpt4 key购买 nike

我写了一个简单的 PasswordGenerator gem,我在 ~/workspace/gems/password_generator 有一个应用程序,在 ~/workspace/rubysamples/app 我在那里想使用它。我有一个Gemfile,它的内容是这样的:

gem 'password_generator', path: '~/workspace/gems/password_generator'

我是在本地安装的,像这样:

bundle install --local
Resolving dependencies...
Using bundler 1.16.5
Using password_generator 0.1.0 from source at `~/workspace/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 info password_generator
* password_generator (0.1.0)
Summary: Simple password generator
Homepage: https://github.com/jedrekdomanski/password_generator
Path: /home/jedrek/workspace/gems/password_generator

当我尝试使用它时

~/workspace/rubysamples/app/password_reset.rb

PasswordGenerator.generate

我得到一个错误

uninitialized constant PasswordGenerator (NameError)

我做错了什么?我错过了什么吗?

这是我的 gem 存储库:https://github.com/jedrekdomanski/password_generator

我还尝试在 Gemfile 中指向我的 repo 和分支

gem 'password_generator', git: 'git@github.com:jedrekdomanski/password_generator.git', branch: 'master'

但我收到相同的错误消息 uninitialized constant PasswordGenerator (NameError)

最佳答案

可能有两个问题。第一个是您如何启动 Ruby,第二个是您如何要求您的模块。

首先,如果您通过运行 ruby password_reset.rb 启动 Ruby,那么您将忽略 GemfileGemfile 仅在您使用 bundler 时使用,因此您要确保通过运行 bundle exec ruby​​ password_reset.rb 来启动 Ruby >。这会导致 bundler 读取您的 Gemfile 并在该上下文中执行 Ruby。

其次,您没有在 Ruby 文件中正确地包含您的模块。仅仅因为您已经将 gem 添加到 Gemfile 并使用 bundler 启动了 Ruby,并不意味着 Ruby 进程知道您打算使用该 gem 的模块;它只是使模块可用 以供使用。您可能想知道,“为什么我不必在 Rails 中这样做?”因为Rails does that for you automatically via 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

一切正常,因为:

  1. Ruby 从 Bundler 开始
  2. Bundler 读取您的 Gemfile 并使 Gem 可用于 Ruby
  3. 在尝试使用模块之前,您的应用需要 gem 中的模块

关于Ruby - 无法使用本地安装的 gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52707088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com