En mygem.gemspec tengo la siguiente gema que solo quiero con el propósito de depurar mi gema rubí:

Gem::Specification.new do |s|
  ...
  s.add_development_dependency "pry"
  ...
end

Luego, en mi archivo generador de Rails, tengo require "pry", sin embargo, aparece el siguiente error:

.rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require': cannot load such file -- pry (LoadError)

Si cambio add_development_dependency a add_dependency, funciona. ¿Estoy haciendo algo mal?

Editar:

lib / generators / mygem / install_generator.rb

require "pry"

module MyGem
  module Generators
    class InstallGenerator < Rails::Generators::Base

      namespace "mygem:install"

      def process
        binding.pry
      end

    end
  end
end

seguimiento de pila completa

$ rails g mygem:install
Running via Spring preloader in process 99478
.rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require': cannot load such file -- pry (LoadError)
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `block in require'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in `load_dependency'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require'
  from Projects/mygem/gem/mygem/lib/generators/cast/install_generator.rb:1:in `<top (required)>'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `block in require'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in `load_dependency'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require'
  from .rvm/gems/ruby-2.3.3/gems/railties-5.1.6/lib/rails/command/behavior.rb:82:in `block (2 levels) in lookup'
  from .rvm/gems/ruby-2.3.3/gems/railties-5.1.6/lib/rails/command/behavior.rb:78:in `each'
  from .rvm/gems/ruby-2.3.3/gems/railties-5.1.6/lib/rails/command/behavior.rb:78:in `block in lookup'
  from .rvm/gems/ruby-2.3.3/gems/railties-5.1.6/lib/rails/command/behavior.rb:77:in `each'
  from .rvm/gems/ruby-2.3.3/gems/railties-5.1.6/lib/rails/command/behavior.rb:77:in `lookup'
  from .rvm/gems/ruby-2.3.3/gems/railties-5.1.6/lib/rails/generators.rb:250:in `find_by_namespace'
  from .rvm/gems/ruby-2.3.3/gems/railties-5.1.6/lib/rails/generators.rb:267:in `invoke'
  from .rvm/gems/ruby-2.3.3/gems/railties-5.1.6/lib/rails/commands/generate/generate_command.rb:24:in `perform'
  from .rvm/gems/ruby-2.3.3/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
  from .rvm/gems/ruby-2.3.3/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
  from .rvm/gems/ruby-2.3.3/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
  from .rvm/gems/ruby-2.3.3/gems/railties-5.1.6/lib/rails/command/base.rb:63:in `perform'
  from .rvm/gems/ruby-2.3.3/gems/railties-5.1.6/lib/rails/command.rb:44:in `invoke'
  from .rvm/gems/ruby-2.3.3/gems/railties-5.1.6/lib/rails/commands.rb:16:in `<top (required)>'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `block in require'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in `load_dependency'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require'
  from Projects/mygem/themes/sample/bin/rails:9:in `<top (required)>'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:286:in `load'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:286:in `block in load'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in `load_dependency'
  from .rvm/gems/ruby-2.3.3/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:286:in `load'
  from .rvm/rubies/ruby-2.3.3/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:59:in `require'
  from .rvm/rubies/ruby-2.3.3/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:59:in `require'
  from -e:1:in `<main>'

Editar:

Aquí hay una gema de muestra con el problema: https://github.com/ryangrush/stackoverflow_ruby_gem

1
Ryan Grush 17 oct. 2018 a las 00:47

2 respuestas

La mejor respuesta

Agregue esto a su Gemfile en la raíz del proyecto:

group :development, :test do
  gem 'pry'
end

Y por supuesto corre

bundle install
1
lacostenycoder 16 oct. 2018 a las 23:00

Creo que malinterpretas lo que significa "Development_dependency": (Esto no tiene nada que ver con tu entorno rails, ya que la mayoría de las gemas no dependen de rails ni de los indicadores ambientales).

Tomado de la guía RubyGems:

DECLARANDO DEPENDENCIAS ...

Tiempo de ejecución frente a desarrollo

RubyGems proporciona dos "tipos" principales de dependencias: tiempo de ejecución y desarrollo. Las dependencias de tiempo de ejecución son lo que su gema necesita para funcionar (como los rieles que necesitan soporte activo).

Las dependencias de desarrollo son útiles cuando alguien quiere realizar modificaciones en su gema. Cuando especifica las dependencias de desarrollo, otro desarrollador puede ejecutar gem install --dev your_gem y RubyGems tomará ambos conjuntos de dependencias (tiempo de ejecución y desarrollo). Las dependencias de desarrollo típicas incluyen marcos de prueba y sistemas de compilación.

Establecer dependencias en su gemspec es fácil. Simplemente use add_runtime_dependency y add_development_dependency :

Gem::Specification.new do |s|
  s.name = "hola"
  s.version = "2.0.0"
  s.add_runtime_dependency "daemons", ["= 1.1.0"]
  s.add_development_dependency "bourne", [">= 0"]

Entonces, dado que su gema necesita pry para funcionar, según su diseño, entonces pry sería una dependencia de tiempo de ejecución. O eso, o necesita poner trampas alrededor de este código para determinar

  • a) ¿Rails está definido? y;
  • b) ¿Estamos en el entorno development?? y;
  • c) ¿Está definido Pry? o;
  • d) ¿podemos cargar pry (rescatar de LoadError)
2
engineersmnky 17 oct. 2018 a las 16:11