【问题标题】:How to find if a gem is a library?如何判断一个 gem 是否是一个库?
【发布时间】:2009-11-20 12:09:42
【问题描述】:

我尝试使用 environment.rb 中的 config.gem 指令向我的 Rails 应用程序添加一些 gem,以便当应用程序部署到新系统上时,可以使用 rake gems:install 处理缺少 gems 的问题

添加我的应用所依赖的必需 gem 列表后,我的应用无法启动。如果我从 environment.rb 文件中删除所需的 gem 列表,则应用程序启动正常。

environment.rb 中的注释说

# You have to specify the :lib option for libraries, where the Gem name (sqlite3-ruby) differs from the file itself (sqlite3)

我很确定我错过了其中一个 gem 的 :lib 选项,如何找到 gem 是否是一个库和它的库名称?

【问题讨论】:

    标签: ruby-on-rails gem


    【解决方案1】:

    并不是说有“图书馆宝石”和“非图书馆宝石”。而是 Rails 自动 requires 所有由 config.gem 加载的 gem。 Rails 知道需要什么的方式是您使用:lib 指定的内容。如果您不指定任何内容,它会尝试要求提供 gem 的名称。

    例如:

    config.gem 'simple-navigation'
    

    将需要“简单导航”gem,但它不起作用。您必须改为指定:

    config.gem 'simple-navigation', :lib => 'simple_navigation'
    

    查看您需要的宝石的说明,看看他们的说明是否要求您需要不同的东西。 (例如,如果其中一个包含连字符,则在生成的 :lib 引用中可能会是一个下划线。)

    【讨论】:

    • @John,谢谢。 “查看您需要的宝石的说明,看看他们的说明是否要求您需要不同的东西。” - 我如何以及在哪里可以找到这些说明?
    • 每个 gem 都应该有一个 README 文件或类似的东西,它概述了它的使用方式。 (有时它们需要更具体的配置,而不仅仅是包含在内;您可以在此处找到该信息。)
    【解决方案2】:

    我找到正确库的尝试和真实的方法(如果没有包含在自述文件中,我发现经常是这种情况)是运行

    宝石规格

    然后查看文件列表,尤其是在 lib/ 目录中。通常,名称最接近宝石本身的就是我要找的那个。显然这不是 %100 可靠的,但它对我有用。

    例如 gem spec ruby​​-plsql 给出

    --- !ruby/object:Gem::Specification 
    name: ruby-plsql
    
    ....    
    
    extra_rdoc_files: 
    - History.txt
    - License.txt
    - README.txt
    files: 
    - History.txt
    - License.txt
    - README.txt
    - lib/oradate_patch.rb
    - lib/plsql/connection.rb
    - lib/plsql/jdbc_connection.rb
    - lib/plsql/oci_connection.rb
    - lib/plsql/package.rb
    - lib/plsql/procedure.rb
    - lib/plsql/schema.rb
    - lib/ruby_plsql.rb
    - lib/ruby_plsql/version.rb
    - spec/plsql/package_spec.rb
    - spec/plsql/procedure_spec.rb
    - spec/plsql/schema_spec.rb
    - spec/spec.opts
    - spec/spec_helper.rb
    has_rdoc: true
    homepage: http://ruby-plsql.rubyforge.org
    licenses: []
    
    ....
    
    rubyforge_project: ruby-plsql
    rubygems_version: 1.3.4
    signing_key: 
    specification_version: 2
    summary: ruby-plsql gem provides simple Ruby API for calling Oracle PL/SQL procedures.
    test_files: []
    

    我看到了

    lib/ruby_plsql.rb

    由于 gem 被命名为 ruby​​-plsql,我猜测它可能是主 lib 文件。您还可以检查 .gemspec 文件以查看它的构建目标。

    【讨论】:

      【解决方案3】:

      需要的宝石很有帮助

      【讨论】:

        【解决方案4】:

        实际上,'gem contents' 会列出 gem 中的文件,这会给你提供线索。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-01
          • 2015-03-01
          • 2010-11-27
          • 1970-01-01
          • 2011-08-17
          • 2019-03-20
          相关资源
          最近更新 更多