gem which cannot find gem despite it being installed

后端 未结 3 1254
陌清茗
陌清茗 2021-01-12 10:20

I\'ve built my first gem but I don\'t seem to be able to get it to install correctly. I can issue the command

sudo gem install ceilingfish-toto
相关标签:
3条回答
  • 2021-01-12 10:38

    gem which ceilingfish-toto looks through the gem require path for a file named ceilingfish-toto.rb. Since there isn't one, it returns nothing. What would work for you is gem which toto, but since lib/ is not included in your gem spec, the lib files are not installed, so it doesn't exist.

    Rerunning rake gemspec might fix the problem.

    As an aside, you can check whether a gem is installed by its name by using gem list ceilingfish-toto which should show you it is installed, regardless of the files it has(it will also list the versions installed).

    0 讨论(0)
  • 2021-01-12 10:43

    OK, so the problem here appears to be that there was a problem with my gemspec file. From what I can tell there absolutely has to be a file with the name lib/gem-name.rb so in this case I needed lib/ceilingfish-toto.rb.

    This doesn't seem to be true for some other gems to operate correctly. For example mime-types or rest-client, even though they do not show up with gem which, they do actually work.

    I'm not sure this is entirely correct yet, I'm sure there should be a way to get a gem with a hyphen in the name to behave correctly. If I find out I'll post back and let y'all know.

    0 讨论(0)
  • 2021-01-12 10:52

    It's not the hyphen.

    gem which searches for library files in gems, not gems. Compare:

    $ gem which haml
    /home/dave/.gem/ruby/1.8/gems/haml-3.0.12/lib/haml.rb
    $ ls haml-3.0.12/lib/h*
    haml  haml.rb  haml.rbc
    

    Peachy. Note the existance of lib/haml.rb.

    $ gem which rails
    ERROR:  Can't find ruby library file or shared library rails
    $ ls rails-2.3.8/lib/r*
    rails_generator.rb  railties_path.rb  rubyprof_ext.rb  ruby_version_check.rb
    

    There is no lib/rails.rb. But try:

    $ gem which railties_path # not a gem
    /home/dave/.gem/ruby/1.8/gems/rails-2.3.8/lib/railties_path.rb
    

    So gem which ceilingfish-toto throws an error even when ceilingfish-toto is installed because there is no lib/ceilingfish-toto.rb file (there's not even a lib folder).

    0 讨论(0)
提交回复
热议问题