The RubyForge FAQ

Please post to the support forum if you have a suggestion for improving this document, thanks! And you might want to read this blog entry on the purpose of the support forum as well.

  1. How do I upload pages to myproject.rubyforge.org?
  2. Got any Webalizer or AWStats reports?
  3. How can I authenticate my CVS/Subversion commits with a public key?
  4. How do I get diff emails when I commit code?
  5. How can I get notified when people submit bugs or post to my forums?
  6. What's all this trove stuff about?
  7. How do I get news posted on the RubyForge front page?
  8. How can I use a public key for authentication?
  9. How can I make my project summary page cleaner?
  10. Got any Wiki support?
  11. I can't log in via SSH - it keeps saying 'restricted shell'
  12. I just released a file and I can't download it!
  13. I deleted a gem from my file releases page, but it still shows up when I do a gem list --remote some_gem_name ! How do I remove it entirely?
  14. My mailing lists are getting lots of spam!
  15. I'm getting a SSH error Disconnecting: Corrupted check bytes on input when I try to commit.
  16. Can I host a Rails plugin on RubyForge?
  17. How can I rename my project?
  18. Oops, I removed myself as project admin and I can't get admin permissions back!
  19. I want to make a tax-deductible contribution!
  20. What if I upload a gem with someone's project name?
  21. What's a good way to structure my Subversion repository?
  22. Project xyz seems to be abandoned. Can you pass it to me?
  23. The files in my virtual host aren't group-writeable!
  24. Anonymous cvs/svn checkouts and exports keep failing
  25. I can't push to my project's Git repository!
  26. How do I start my Git repository?
  27. File downloads are very slow!

  1. How do I upload pages to myproject.rubyforge.org?
    You can put web pages for your project on RubyForge at /var/www/gforge-projects/[yourproject]/. You can copy content into that directory using SCP (secure copy) or SFTP. You'll need to have a public key in place for either one of those. Here's an example:

    $ scp index.html tom@rubyforge.org:/var/www/gforge-projects/support/
    index.html           100%
    |**********************************************************************|    25
    00:00
    $
    

    Note that you can also use SFTP to do this.

    You can use PSCP for Windows - download it from the Putty web site. Here's an example of PSCP:

    C:\>pscp test.html tom@rubyforge.org:/var/www/gforge-projects/support/
    test.html                 |         11 kB |  11.2 kB/s | 
    ETA: 00:00:00 | 100%
    
    C:\> 

  2. RubyForge's host key is

    2048 35 2712821469779601356879786632862393483206159676635804839487746154631525842844777072518794232492807976734
    52288899396923951697917389180490051455331579916738448586885124538215795263083376617824319691830569744331640311493436
    01280808054465112619654124214030411270623679483897209834029345658919046381078172003770636477168485426650339607221016
    93730730967620763236891830039742213023291548864502112341293541392223755220162522085398264461119586415182870226369343
    76954714162323703380635132170971069484339145511049843619588789699865519841596310559919512418055368067018415945004841
    01919755558081660006339131162436310076649867950041
  3. Got any Webalizer or AWStats reports?
    Sadly, no. We had these set up for a while, but they became spam referrer link farms. Ah well.


  4. How can I authenticate my CVS/Subversion commits with a public key?

    RubyForge supports two SCM utilities - CVS and Subversion - and requires public key authentication. You can pick which one you want to use when you start your project. Also, if you want to convert an existing project from CVS to Subversion, just put in a support request. Some more details on the Subversion support are on Tom's blog.

    If you already have a CVS or Svn repository in place, we can drop that into your SCM space at RubyForge so you can keep all your branches and history and such. If you want to do that, please put in a support request.

    If you want a graphical tool to help with managing CVS or Svn, check out TortoiseCVS or TortoiseSVN.

    * Subversion notes

    To import some code to your Subversion repository, first make sure you have a Subversion client installed. Then do something like this - just plug in your user name in place of 'fred' and your project name in place of 'rubyinstaller':

    svn import svn+ssh://fred@rubyforge.org//var/svn/rubyinstaller
    

    Here are some notes - thanks to Nick Skriloff for putting these together - about connecting to a RubyForge Subversion repository from Windows using the cvillejam project as an example:

    I will first explain how to get the command line option working. Then I will get TortiseSVN working. This is all on Windows XP.

    TortiseSVN:

    If you're looking to get Subversion+TextMate+RubyForge working, check out this post by Aaron Smith.

    If you're using SvnX, check out this post by Jacques Distler.

    * CVS notes

    You've probably got some code you want to import into the CVS repository. You can do that by setting your CVSROOT. Note that if you're running Windows, the CVS client from here may work better than the one from cvsnt.org. Note also that [myprojectname] is your "unix name" - i.e., no spaces or other "funny characters" - so for the "Mini Ruby Wiki" project, for example, the "unix name" is "minirubywiki":

    $ CVSROOT=:ext:tom@rubyforge.org:/var/cvs/[myprojectname] && export CVSROOT
    
    and your CVS_RSH:
    $ CVS_RSH=ssh && export CVS_RSH
    
    using then the CVS import command. So, for example, if you were importing a "support" module, the import command would look like this:
    $ cvs import -m "initial import" support tom start
    N support/test.txt
    
    No conflicts created by this import
    

    Note that when doing a cvs import:


  5. How do I get diff emails when I commit code?

    You may want to configure CVS or Subversion to notify you when a commit or add occurs. In either case, if you want the commits to go to a mailing list, you'll need to add at least one email address to the Mailman sender filters. To do this for Subversion commits, go to the Mailman admin page for the list (e.g., http://rubyforge.org/mailman/admin/your-list-name/), click on "Privacy options", click on "Sender filters", and add the address nobody@rubyforge.org to the "accept_these_nonmembers" option text box. To do the same for CVS commits, go to the same page but add all the email addresses for the folks who are committing code. This has to be their RubyForge account addresses - so if a committer's RubyForge account name is rubyhacker you'll need to enter rubyhacker@rubyforge.org as the email address.


  6. How can I get notified when people submit bugs or post to my forums?
    To make sure you get notified when anything happens on your project, you can go to each of the "trackers" - i.e., the bug tracker, the feature request tracker - and enable email notification. To do that, go to your project page, click on "Tracker" on the left side of the page, click on "Admin" at the top of the page, click on "Bugs", click on "Update preferences", and put your email address in the "Send email on new submission to address:" box. Also, you can check the box right below it that says "Send email on all changes".

    You might also want to go to the discussion forums and click the "monitor" button at the top of each forum. That way you'll get an email if someone posts to the forum.


  7. What's all this trove stuff about?
    The Trove is accessed in the website navigation bar atop the RubyForge home page by clicking on the
    Project Tree tab. You'll probably want to categorize your project in the Trove so that other folks can find it more easily. To do this, log in, go to your project's admin page, and click on the "Trove Categorization:: [Edit]" link in the middle of the page.


  8. How do I get news posted on the front page?
    Feel free to post news to your project - it'll show up immediately on your project, and once every couple of days Ben Bleything will go thru the news submissions and promote certain ones to the front page - whatever he thinks would be interesting to the RubyForge community as a whole.


  9. How can I use a public key for authentication?
    To use a SSH public key for authentication, log in, click on "My Page", click on "Account Maintenance", scroll down to the bottom of the page, click on "Edit keys", paste in your SSH public key (which you can create using a command like ssh-keygen -t rsa), and click "Update". Note that a public key may include a small type prefix like "ssh-dss" or ssh-rsa". A cron job runs every 15 minutes that copies that public key into your home directory on RubyForge, and you should be all set.

  10. How can I make my project summary page cleaner?
    If you don't plan to use some of the features that RubyForge provides, consider disabling them; after all, you can always turn them back on. You can turn things off by logging in to RubyForge, clicking over to your project's summary page, clicking the Admin tab, clicking the "Edit Public Info" link, and deselecting the appropriate checkboxes. Likely candidates for disabling include the mailing lists, the project/task manager, and the surveys.

  11. Got any Wiki support?
    You can enable a Wiki for your project by clicking over to your project's summary page, clicking the Admin tab, clicking the "Edit Public Info" link, and selecting the 'Wiki' check box. Some notes on how to do Wiki formatting are
    here. Also, to link to an external site from your Wiki, use "HTTP", not "http". This is an anti-spam technique, which seem to help reduce it a bit, curse those spammers!

  12. I can't log in via SSH - it keeps saying 'restricted shell'!
    Note that RubyForge doesn't allow shell access - we're trying to keep the server load down so that RubyForge is more responsive for everyone. Eventually maybe we'll come up with some sort of chroot'd shell access.... but that's down the road a bit.

  13. I just released a file and I can't download it!
    Files are sync'd out to the mirror servers. This syncing process runs every half an hour, so there's a window of time when the file may not be available for download.

  14. I deleted a gem from my file releases page, but it still shows up when I do a gem list --remote some_gem_name ! How do I remove it entirely?
    This means your gem is stuck in the gemserver mirror rotation. If this happens and you're sure you want to get rid of it, you can file a
    support request. Just include something like 'please remove my_gem_name from the gem server' as your summary. Once I remove them from the gems directory it will take a day or two for them to go away completely since this depends on a full gem index rebuild happening.

    Note that this tedious procedure will probably go away as we transition to gemcutter; no doubt there will be a user interface around this so's you can manage your own gems.

  15. My mailing lists are getting lots of spam!
    Here are some tips on keeping your mailing lists neat and tidy:

    1. Your list will undoubtedly receive spam, and every time this happens you as list administrator will get an email saying "do you want to approve this pending message?". This gets annoying, so you may want to simply discard all non-member postings. To do this, go to your list admin page, the URL for which is something like this: http://rubyforge.org/mailman/admin/support-mirrors. Log in, then click on "Privacy options" and then click on "Sender filters". Scroll down to the generic_nonmember_action radiobuttons, and then select "discard". Right below that, select "no" beside the forward_auto_discards setting. Then click "Submit your changes". No more annoying emails!
    2. You may want to hold non-member postings for a few days and then discard them automatically if you haven't taken action on them. That's the way new lists are set up by default - held postings are discarded after 7 days. To change this, log in to your list admin page and you'll be taken to the "General options" page. Scroll down to the bottom of that page and tweak the max_days_to_hold setting as you see fit.
    3. If you forget your mailing list password, no problemo, just file a support request and I'll reset it.

  16. I'm getting a SSH error Disconnecting: Corrupted check bytes on input when I try to commit.
    Try adding the line Cipher blowfish to your ~/.ssh/config file.

  17. Can I host a Rails plugin on RubyForge?
    Thanks to
    Zak Mandhro for writing up these instructions!

    If you are using Subversion as your SCM, all you need to do is create a folder structure for the plugin within your SVN tree and provide your users with a link to web-svn. If you are using CVS, you'd want to keep reading.

    Simply putting your plugin source files in your project web folder will not work because RubyForge web server's auto-generated index page is not compatible with Rails plugin HTTP fetcher. I've created a Rake extension that will generate the index files and structure for publishing your plugin. You can get it from here.


  18. How can I rename my project?
    Renaming your project is rather difficult in GForge - the name is embedded all over the place. The best way to get your project renamed is to put in a new project request and when it's been approved and you've got things migrated over, put in a support request to have the old one deleted. This will help keep RubyForge tidy, too... which is nice.

  19. Oops, I removed myself as project admin and I can't get admin permissions back!
    If you've accidentally twiddled the permissions in your project so that there are no longer any project admins, just put in a support request and I'll fix it. And don't feel too bad; this happens once or twice a week - it's really just poor UI design.

  20. I want to make a tax-deductible contribution!
    Super! You can donate to
    Ruby Central; they provide the RubyForge hardware.

  21. What if I upload a gem with someone's project name?

    RubyGems released on RubyForge are built into one gem index which is keyed by the gem name. So, for example, "rails-2.3.4.gem" is in the gem index and maps to the Rails gem. Some salient points:


  22. What's a good way to structure my Subversion repository?
    Here's some advice on this from
    Vincent Fourmond:

    Some projects want to have only one 'main directory' in their repository, so that it would look like

    svn://rubyforge.org/var/svn/some_project/trunk
    svn://rubyforge.org/var/svn/some_project/branches
    svn://rubyforge.org/var/svn/some_project/tags
    

    You can create this structure as a project admin by running these commands:

    svn mkdir svn+ssh://developername@rubyforge.org/var/svn/project/trunk
    svn mkdir svn+ssh://developername@rubyforge.org/var/svn/project/tags
    svn mkdir svn+ssh://developername@rubyforge.org/var/svn/project/branches
    

    Another way is to do subprojects:

    svn://rubyforge.org/var/svn/some_project/subproject_1/trunk
    svn://rubyforge.org/var/svn/some_project/subproject_1/branches
    svn://rubyforge.org/var/svn/some_project/subproject_1/tags
    

    and so on for other subprojects. Finally, I would say that usually, you check out a svn repository with the following command:

    svn co svn+ssh://deve@rubyforge.org/var/svn/some_project/trunk some_project
    

    This way, the trunk directory is mapped as a some_project directory on your local copy: it is much easier to work on.

  23. Project xyz seems to be abandoned. Can you pass it to me?

    This comes up occasionally - a well-named or positioned project gets started, then the project admin falls out of sight and can't be reached. Patches pile up, people start wondering what's going on, and it seems a shame to lose the project name by forking it. So someone will ask if we as RubyForge admins will pass over control of the project to them.

    We really, really, hesitate to transfer admin privileges from one person to another, even if the original admin has completely disappeared. I suspect there are legal complications, and we don't have the budget to deal with those. Furthermore, suppose the original admin has been off on furlough for a year and comes back to find that his project has been moved away from him. Not a pleasant situation.

    In situations where the project admin can't be reached for a long time and folks want to move forward, I suggest forking the project. You're welcome to host a xyz2 version of project xyz on RubyForge, and if the original admin ever shows up again and wants to hand over the project to you, we can help facilitate that.

  24. The files in my virtual host aren't group-writeable!

    If you have several people uploading files to your virtual host, the permissions maybe get messed up - for example, the files might not be group-writeable. As the project admin, you can fix this by logging in, clicking on the "admin" tab of the project, and then clicking the "Schedule a reset of virtual host permissions to be group-writeable" button on the left side of the page. This will cause the permissions to be reset next time the appropriate cronjob runs - which happens once a minute.

  25. Anonymous cvs/svn checkouts and exports keep failing

    Sometimes you'll see a svn: Connection closed unexpectedly error message when you try to export or check out a Subversion repository using anonymous Subversion - e.g., svn co svn://rubyforge.org/var/svn/rspec/trunk/rspec rspec. Or with CVS, the message will be something like cvs [checkout aborted]: end of file from server (consult above messages if any). This is probably happening because we throttle anonymous connections based on server load (using xinetd). You may instead want to use HTTP for anonymous Subversion checkouts instead -e.g., svn co http://rspec.rubyforge.org/svn/trunk/rspec rspec.

  26. I can't push to my project's Git repository!

    RubyForge Git repositories are managed via gitosis; gitosis does authentication via public keys. This means that in order to push to a RubyForge Git repository you'll need to upload a public key to your account - see notes on that here. Additionally, you need to ensure that your public key has a comment on the end, as gitosis uses that as the key file name. You can generate a public key with a comment on the end by using ssh-keygen -t dsa -C "your_user_name@some_host".

    Generally, Git support is something we've just introduced, so feedback about it on the forums would be quite welcome.

  27. How do I start my Git repository?

    If you have code in an existing Subversion repository, you'll probably want to copy over that code with all the history. To do this, use git svn clone. For example, if your project was named ai-app-prog, you would clone the repository:

    $ git svn clone -s http://ai-app-prog.rubyforge.org/svn/ ai-app-prog
    Initialized empty Git repository in /Users/tom/rubyforge.org/ai-app-prog/.git/
    r1 = e696a12eafd7b8285b7277e8afd5fa5561275690 (trunk)
    A CVSROOT/readers
    [ ... etc ... ]
    r333 = d92f63303603ec14bc094efc4d285f1053ae728f (trunk)
    Checked out HEAD:
    http://ai-app-prog.rubyforge.org/svn/trunk r333
    

    You'll probably want to run a git repack right away; this can reduce the disk usage of your project by an order of magnitude. I used to recommend git gc --aggressive here, but apparently repack is just as good if not better. Continuing with the ai-app-prog project example:

    $ cd ai-app-prog
    $ git repack -ad --depth=250 --window=250
    Counting objects: 184, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (96/96), done.
    Writing objects: 100% (184/184), done.
    Total 184 (delta 77), reused 184 (delta 77)
    

    Now file a "convert my project from svn to git" support request. Once someone posts a note to it saying 'you're all set', then delete the remote branches in your repository. You can list them with git branch -r and delete them with git branch -r -d trunk_or_some_other_tag_name. If there's a more straightforward way to accomplish this, please let me know, thanks!

    Once all that's done, add the remote repository and push to it:

    $ git remote add origin gitosis@rubyforge.org:ai-app-prog.git
    $ git push origin master:refs/heads/master
    Initialized empty Git repository in ./
    Counting objects: 1954, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (1096/1096), done.
    Writing objects: 100% (1954/1954), 336.65 KiB | 23 KiB/s, done.
    Total 1954 (delta 655), reused 1954 (delta 655)
    refs/heads/master: 0000000000000000000000000000000000000000 -> d92f63303603ec14bc094efc4d285f1053ae728f
    To gitosis@rubyforge.org:ai-app-prog.git
     * [new branch]      master -> master
    

    Now you can browse around your project, e.g., http://ai-app-prog.rubyforge.org/git?p=ai-app-prog.git;a=tree

    Alternatively, if this is a new project and you have no history to import, you can just file your project request and once it's approved initialize a repository and push it up, e.g.:

    mkdir my_project 
    cd my_project 
    git init 
    git remote add origin gitosis@rubyforge.org:my_project.git 
    echo "Initial push for my_project" > README 
    git add README 
    git commit -a -m "Added a README file" 
    git push origin master:refs/heads/master
    

    Dr. Nic Williams wrote up some excellent suggestions for working with RubyForge's Git repos.

  28. File downloads are very slow!

    Some folks have reported very slow downloads. This may be some network congestion problem between your computer and the Bytemark file server. If you observe this, you can download a file directly from RubyForge by tacking /noredirect onto the end of the URL. For example, if you were downloading the Ruby Windows installer at http://rubyforge.org/frs/download.php/69035/rubyinstaller-1.9.1-p378-rc2.exe, you could download it directly from RubyForge by hitting http://rubyforge.org/frs/download.php/69035/rubyinstaller-1.9.1-p378-rc2.exe/noredirect.

    Generally we prefer folks to use the usual links that hit the file mirror - this lightens the RubyForge network load. But this workaround is provided just to cover the bases.