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.
gem list --remote some_gem_name! How do I remove it entirely?
Disconnecting: Corrupted check bytes on inputwhen I try to commit.
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 firstname.lastname@example.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 email@example.com:/var/www/gforge-projects/support/ test.html | 11 kB | 11.2 kB/s | ETA: 00:00:00 | 100% C:\>
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.
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://firstname.lastname@example.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.
c:\Program Files\putty) in the windows path and validate that you can run from a windows command line:
@rubyforge.org svnserve -t
Mine looked like
C:\>plink email@example.com svnserve -t ( success ( 1 2 ( ANONYMOUS EXTERNAL ) ( edit-pipeline ) ) )
private.ppk. I saved them in
c:\Program Files\putty\. Note) Putty is going to use the
private.ppkkey and RubyForge is going to use the
Session--Host=rubyforge.org,protocol=ssh Session.Logging--Save a log file somewhere in case there are problems Connection.Data--auto-login username=
(I used skriloffn) ssh--Preferred ssh protocol version=1 ssh.auth--private key file for authentication c:\Program Files\putty\private.ppk
Make sure you save this session. For my example I saved it as cvilleCodeJam.
@rubyforge.org svnserve -t
plink cvilleCodeJam svnserve -t. Mine looked like:
C:\temp\tempJam\cvillejam\ideas>plink cvilleCodeJam svnserve -t ( success ( 1 2 ( ANONYMOUS EXTERNAL ) ( edit-pipeline ) ) )
Hit enter and you will be back to a command prompt.
C:\Documents and Settings\File and change line 41 or so:
### Section for configuring tunnel agents. [tunnels] ssh=plink
svn checkout svn+ssh://cvilleCodeJam/var/svn/cvillejam
You should see the files checked out. FYI the
url=svn+ssh://cvilleCodeJam/var/svn/cvillejam. You can now run
svn help to see how to commit files.
svn+ssh://cvilleCodeJam/var/svn/cvillejam. Because you have the putty session and putty is in your path, Tortise will find it.
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:firstname.lastname@example.org:/var/cvs/[myprojectname] && export CVSROOTand your CVS_RSH:
$ CVS_RSH=ssh && export CVS_RSHusing 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:
How do I get diff emails when I commit code?
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
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
email@example.com as the email address.
$ CVSROOT=:ext:firstname.lastname@example.org:/var/cvs/support && export CVSROOT $ cvs co CVSROOT cvs server: Updating CVSROOT U CVSROOT/checkoutlist U CVSROOT/commitinfo U CVSROOT/config U CVSROOT/cvswrappers U CVSROOT/editinfo U CVSROOT/loginfo U CVSROOT/modules U CVSROOT/notify U CVSROOT/passwd U CVSROOT/rcsinfo U CVSROOT/readers U CVSROOT/taginfo U CVSROOT/verifymsg [tom@hal tmp]$
Now edit your CVSROOT/loginfo file and put your email address (or a list address ) in there:
$ cat CVSROOT/loginfo | grep "@" DEFAULT /usr/local/bin/syncmail %s email@example.com
And check it back in
$ cvs -q ci -m "Added commit email notification" CVSROOT/ Checking in CVSROOT/loginfo; /var/cvs/support/CVSROOT/loginfo,v <-- loginfo new revision: 1.5; previous revision: 1.4 done cvs server: Rebuilding administrative file database [tom@hal tmp]$
Try committing some code; you should get an email shortly containing a list of files modified.
Here are some notes from Vincent Fourmond on setting up commit emails for a Subversion project:
To turn on commit mails for project qtodo, write a file called post-commit with the following contents:
#!/bin/sh REPOS="$1" REV="$2" PATH=/usr/bin:/bin:/usr/local/bin PROJECT=/var/svn/qtodo svnnotify --repos-path "$REPOS" --revision "$REV" --svnlook /usr/local/bin/svnlook --to firstname.lastname@example.org --from email@example.com --with-diff --subject-cx --handler HTML::ColorDiff
I guess you'll find which bits to change to suit your needs ;-). Then, run sftp:
sftp firstname.lastname@example.org:/var/svn/qtodo/hooksThen from sftp, run the following command:
put post-commit chmod 755 post-commit
That's it, run a dummy commit to check the emails are reaching you. To turn it off, log in again using sftp, and run:
Note you can also do something like:
--to email@example.com --from `firstname.lastname@example.org
This way, the "from" address corresponds to the rubyforge
developer's address. Chris Guidry notes that if you do this you'll need to
tweak the "accepted non-members" Mailman list setting to be
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.
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.
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.
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.
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!
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.
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.
I deleted a gem from my file releases page, but it still shows up when I do a
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.
My mailing lists are getting lots of spam!
Here are some tips on keeping your mailing lists neat and tidy:
generic_nonmember_actionradiobuttons, and then select "discard". Right below that, select "no" beside the
forward_auto_discardssetting. Then click "Submit your changes". No more annoying emails!
max_days_to_holdsetting as you see fit.
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.
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.
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:
full_namediffers notably from the gem file name, it won't be deployed to the gem index. This is to prevent someone from deploying a gem with a file name of
rails-4.2.gemand hijacking the Rails gem's spot in the index. You may well experience this if you give a gem a platform-specific name that differs greatly from the filename; I'm still not sure of the best way of making this work.
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://email@example.com/var/svn/project/trunk svn mkdir svn+ssh://firstname.lastname@example.org/var/svn/project/tags svn mkdir svn+ssh://email@example.com/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://firstname.lastname@example.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.
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.
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.
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.
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.
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 email@example.com: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 firstname.lastname@example.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 email@example.com: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.
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
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.