Debugging Stuck Ruby Process - Workling\Starling - ruby

We have a rails app that about every 24 hours runs the load average on the machine well beyond 5. It looks like a stuck Ruby process specifically related to a background process running to manage event and calendar reminders. It seems like killing it and restarting the app resolves temporarily:
dd 6554 1 0 00:38 ? 00:00:15 /usr/local/bin/ruby /usr/local/bin/starling -d -p 15151 -P /u/apps/dd/shared/starling.pid -q /u/apps/dd/shared/starling -L /u/apps/dd/shared/starling.log
Is there anything better than debugging with GDB? I don't see much useful info there.
Ruby 1.8.7 x86_64
Rails 2.3.9
Eventmachine 1.0.3
Workling 0.4.9.9
Starling 0.10.1
CentOS 5.9
Thanks

Pretty much everything you listed is super old. You're problem could be as simple as memory leaks that have been fixed in the years since all of those versions were released.
Otherwise, you could try out some Ruby profile tools such as ruby-prof.

Related

ruby task using 100% of CPU - macbook running

When running a rails server or even console. I have a ruby process that will take 100% of the CPU up and cause the laptop to run the fans at full blast. I can stop the task with
> spring stop
but this isn't a long term solution.
Any ideas if there is a fix/configuration that needs to be made to fix this?
Found a solution to this issue. Apparently the issue resides with the 'listen' gem that's incompatible with MacOs big sur. Updating the gem to this version fixes the issue.
gem 'listen', '>=3.0.5', '<4.0'
Problem and resolution from this thread
https://github.com/rails/spring/issues/636#issuecomment-755404716

Moving Sinatra from Webrick to a different server on windows - thin installed but can't load eventmachine

I'm building a simple web app on Sinatra that I can deploy like a gem to artifactory; to start with I'm getting everything setup.
Here's what I've done:
I've got the the gemspec done so I can deploy like a gem
I've got sinatra modular set up with a basic 'hello world' page
I've got Rspec setup for testing (hello world test passes)
I've got rake tasks to make things easier (booting up sinatra, building the gem, running tests, etc)
Now I need to move Sinatra from Webrick to somthing a bit more robust and that's this is where I'm hitting a wall.
I've tried Unicorn,thin and Puma but they all won't install and I don't know what to do.
They all fail at Building Native extensions, I don't know what to do.
I'm using windows 8.1 (i'd rather be doing this on ubuntu but the company uses windows and to be honest I like a challenge) ruby 2.1 and I have devkit installed (and it's working now, wouldn't last night).
From what I've read Unicorn won't work on windows so the best bet is to go with thin but that fails with: extconf.rb
checking for main() in -lc... *** extconf.rb failed ***
It mentions that I need the devkit installed (it is the first line is Temporarily enhancing PATH to include DevKit...)
Despite this it fails, I tried doing what I found in this but that didn't help ( Installing event machine didn't do anything).
I'm at a loss of what to do next.
EDIT:
Whilst I've solved the problem of getting Thin to install it now has a differant error
IT can't load eventmachine.
EDIT:
It all comes down to the fact that the Devkit wasn't being recognised or it didn't install properly or something. I wonder why.
I've tried Unicorn,thin and Puma but they all won't install and I don't know what to do. They all fail at Building Native extensions, I don't know what to do.
The reason these are failing is that many ruby gems use native C extensions which expect to be compiled and installed on a linux or unix environment.
Doing any sort of Ruby development work on a Windows machine is an exercise in sadomasochism.
I strongly recommend you install VirtualBox, download an Ubuntu or similar linux virtual machine image, boot it, configure it, and use it as your development webserver. You can continue to edit your code in windows, but you will be running it in a sane environment.
Ultimately, you may have to learn some new skills, but you will save yourself an enormous amount of frustration by moving off windows as your development platform.
I managed to get thin installed but it wasn't easy
I wiped every bit of ruby from my machine, including all references in the registry, got rid of pik as well.
I then followed these steps (that I worked out along with an answer from another question) and it now works
install rubyinstaller 2.1.3
install devkit
gem install thin --platform=[win64]
notepad C:\Ruby21-x64\lib\ruby\gems\2.1.0\gems\eventmachine-1.0.3\ext\project.h #append line 97 with //
cd C:\Ruby21-x64\lib\ruby\gems\2.1.0\gems\eventmachine-1.0.3
gem build eventmachine.gemspec
move eventmachine-1.0.3.gem up one directory
cd ..
gem install eventmachine-1.0.3.gem
del the gemfile
cd
gem install thin --platform=[win64]
A bit of a job BUT it worked,
The answer in question isthis one.
specifically
2) edited the file:
c:\Ruby21-x64\lib\ruby\gems\2.0.0\gems\eventmachine-1.0.3\ext\project.h
and commented the line 97
//typedef int pid_t; for a more robust correction, checkout the
solution here
https://github.com/eventmachine/eventmachine/pull/450/files
3) then, i've opened command prompt, and went to the gem folder
c:\Ruby21-x64\lib\ruby\gems\2.0.0\gems\eventmachine-1.0.3 and run:
gem build eventmachine.gemspec
In the end, after hammering my head against a wall, on a suggestion I installed chef-client and using the embedded ruby allowed it to work, that said it only uses ruby 1.9.3 but it works so for now it will have to do.

RVM can't install ruby on MacOS

I type this command :
$ rvm install 2.0.0 --with-readline-dir=$rvm_path/usr
Then i press "Ctrl+Z", So RVM is exit.
But When i type command again,
It's stop here...
So, How to resolve it , and install ruby right way?
This step depends on the bandwidth of your internet connection and configuration of your machine and can take upto 15 - 30 minutes. This first downloads(Bandwidth) the ruby binaries and then compiles(CPU + RAM dependent) it.
Also, in your case, its updating system packages.
You should not add --with-readline-dir=$rvm_path/usr - rvm handles this for you automatically.
As for the process - it takes long but should finish in less then hour (on slow internet connection and computer it could be few).
If the process does not show any changes in like 15 minutes you can try two things:
open another console/tab and monitor processes with top, on the top of list you should see something like ruby, curl, cc1, make ... but anything with more then 10-20% in the %CPU column will indicate - work is done.
break the process (CTRL+C) and start it again with:
rvm install 2.0.0 --debug
now it will show more details about what is going on - including log files where all outputs are redirected, you can watch those log files in other console with less (to see from start to current position) or tee -f (to see the changes as they happen)
Ok,I just restart my mac,then install again,that's all
Also just noticed the CTRL+Z - this can be holding some processes that block RVM - try running fg 1 - it should start the stopped process.
For more information about CTRL+Z vs. CTRL+C see https://superuser.com/questions/262942/whats-different-between-ctrlz-and-ctrlc-in-unix-command-line
To echo Nerve's answer and depa - I am fuzzy on why installing with RVM is such a pain - but Homebrew is going to be your best friend when it comes to doing the installations. I had trouble too.
Here is a link to a set up tutorial that i followed: http://tutorials.jumpstartlab.com/topics/environment/environment.html
Make sure homebrew (http://brew.sh/) is installed and if this is your first set up, try looking through the tutorial on set up and seeing if you missed anything
if that doesn't do it - some back and provide more information on what you've done so far and already have set up!

How do I debug a Ruby gem? (Compass)

I am in the early stages of learning Ruby and want to learn how to debug a gem, but am having trouble finding learning resources around this. A simple example would go a long way for me.
Is debugger the preferred debugger? Where do I require it? How do I set breakpoints with it?
Note: I am making an educated guess that the debugging process may be different depending on the gem that needs debugging, so for reference I am particularly interested in debugging certain issues with Compass.
OK, figured this out on my own. Here were the steps I took..
I am running Ruby 1.9.3 (determined by running ruby -v), so after testing ruby-debug and ruby-debug19, I determined these debuggers were no longer maintained, or at least didn't work properly with my install of ruby1.9.3-p125. This lead me to debugger.
The install instructions that worked were:
$ gem install debugger -- --with-ruby-include=PATH_TO_HEADERS
The PATH_TO_HEADERS on my machine, was simply the source location of ruby:
/Users/myusername/.rvm/src/ruby-1.9.3-p125/
Since I was particularly determined to debug the Compass compiler, I did the following:
Cloned the source: $ git clone git://github.com/chriseppstein/compass.git
Checked existing compass version first $ compass -v which was 13.0
Edited VERSION.yml and increased the patch number (to 13.1) so it didn't conflict with my existing install.
Edited the .rb of the file I wanted to debug, which was lib/compass/compiler.rb and added this line at the top: require 'debugger'; debugger
Built the gem: gem build compass.gemspec
Installed the newly compiled gem: sudo gem install compass-0.13.2.058ead2.gem
Compiled an existing compass based project that I was experiencing problems with, and started debugging.
When I was done debugging, I uninstalled the debugging version with sudo gem uninstall compass and chose the number corresponding to Compass 13.2.
Note about step 7: Since debugger has the same debugging commands as ruby-debug/ruby-debug19, I was able to follow existing tutorials around debugging steps..
Such as this RailsCast:
http://railscasts.com/episodes/54-debugging-with-ruby-debug
And this blog (and linked cheat sheet):
http://pivotallabs.com/users/chad/blog/articles/366-ruby-debug-in-30-seconds-we-don-t-need-no-stinkin-gui-
If you have other debugger tutorials, pointers, tips, etc, please post them.

How can I install Maglev with rvm on Mac OS X Lion?

I am trying to install Maglev on Mac OS X Lion with rvm, but running
rvm install maglev
as instructed on the github page only yields a 404 error:
curl: (22) The requested URL returned error: 404
ERROR: The requested url does not exist: 'http://glass-downloads.gemstone.com/maglev/MagLev-26852.Darwin-i386.tar.gz'
which does not seem too helpful, as it just points out that the respective file does not exist on the gemstone server. Google does not seem to know about this, so I thought about asking a question here. However, before doing so I tried some more and and got a little further running
rvm install maglev-head
as mentioned in some blog posts. This finally finds an appropriate file, downloads a bunch of things and starts to compile. It starts to look really well at a point where it says
Installing maglev to /[user-dir]/.rvm/rubies/maglev-head
in green, but unfortunately it does not get much further. The installation hangs after saying
Creating default 'maglev' repository.
Generating maglev HTML documentation
Generating smalltalk FFI.
or at least it takes forever (more than 30 minutes) without saying anything.
Stopping the installation at this point still looks promising giving me
$ rvm list
rvm rubies
maglev-head [ x86_64 ]
but unfortunately
rvm use maglev-head
results in
startstone[Info]: Starting Stone repository monitor 'maglev'.
startstone[Error]: Stone process (id=61119) has died.
startstone[Error]: Examine '/[user-dir]/.rvm/rubies/maglev-head/log/maglev/maglev.log' for more information. Excerpt follows:
without displaying an excerpt and even without stopping. Actually the log file does exist and has a few error messages, the most telling seems to be
GemStone is unable to open the file !TCP#localhost6#dbf!/[user-dir]/.rvm/rubies/maglev-head/data/maglev/extent/extent0.ruby.dbf
but the directory does exist, it would just be the file that is missing, and I would expect the server to create that one on an new image. Still, the situation does not look too bad as i get
which irb
giving me
/[user-dir]/.rvm/rubies/maglev-head/bin/irb
but when I try to start up irb I get
maglev-ruby: [Error] The MagLev server "maglev" is not running.
To fix this run "rake maglev:start" before running maglev-ruby.
but if I call the rake task as instructed I again get
maglev-ruby: [Error] The MagLev server "maglev" is not running.
To fix this run "rake maglev:start" before running maglev-ruby.
putting me in a recursive causality loop. Trying to start the maglev server by hand using
maglev start
as I did on a previous installation using the shell scripts does not work either, giving me
startstone[Info]: Starting Stone repository monitor 'maglev'.
startstone[Error]: Stone process (id=61400) has died.
startstone[Error]: Examine '/[user-dir]/.rvm/rubies/maglev-head/log/maglev/maglev.log' for more information. Excerpt follows:
again without displaying an excerpt and hanging.
Any help would be appreciated as Maglev looks like a really promising piece of infrastructure.
You need to do "rvm get head" first; I can see it was looking for MagLev-26852.Darwin-i386.tar.gz, which was for an older version both of MagLev and of RVM.
I'd do an "rvm remove maglev; rvm install maglev" It shouldn't take more than a few minutes then to build once it's downloaded.

Resources