rubygems / rubygems.org

The Ruby community's gem hosting service.
https://rubygems.org
MIT License
2.32k stars 913 forks source link

Error importing gems for local development #4494

Open bradly opened 6 months ago

bradly commented 6 months ago

Trying to import gems locally is throwing an error:

NoMethodError: undefined method `owner' for an instance of User (NoMethodError)
/Users/bradly/code/archive/rubygems.org/app/models/pusher.rb:11:in `initialize'
/Users/bradly/code/archive/rubygems.org/lib/tasks/gemcutter.rake:21:in `new'

In the rake take we pass a new user instance to the Pusher initializer: https://github.com/rubygems/rubygems.org/blob/d5ec157737e9ca5c7da576fc89b8068446559ce1/lib/tasks/gemcutter.rake#L21

But in the Pusher class we are expecting an api_key and calling owner on it. https://github.com/rubygems/rubygems.org/blob/d5ec157737e9ca5c7da576fc89b8068446559ce1/app/models/pusher.rb#L9-L11

Steps to Reproduce

  1. bundle exec rake "gemcutter:import:process[$gem_install_path]"

Expected Behavior

Gems should be imported

Current Behavior

Error calling .owner on a User instance

Possible Solution

Change the rake task to pass an api key instance instead of a user instance

The following worked but felt a little sketchy. Is there a better solution?

        api_key = ApiKey.first
        api_key.owner ||= User.new
        cutter = Pusher.new(ApiKey.first, File.open(path))

Environment

RubyGems version: latest code frommaster

simi commented 6 months ago

Thanks for the report @bradly. Today it is recommended to use seed instead (which creates gems also). Would you mind to open PR to check for the users from seed to be present (for example gem owner one) and raise with friendly message explaining please first run the seed. And use the seed data to push the gems?

bradly commented 6 months ago

@simi Yes, let me just run through the contributing guide from a fresh db and open a pr with code/doc updates.