Ruby on Rails Thursday, August 29, 2013

On Aug 29, 2013, at 5:33 AM, Shawn h. <lists@ruby-forum.com> wrote:

> Dear all,
> I am developing a web harvesting server which requires regularly
> website parsing. Since I use Mac 10.8 as my development environment, I
> try to use Launchd to routinely wake up my parser. My parser was a bash
> script which has only two lines:
> 1. cd $HOME/ProjectFolder
> 2. bundle exec rake dailyTask:dataParse
>
> When directly execute the script under Terminal, there is no
> problem. However, when this script is called by Launchctl, it produces
> errors, which looks like:
>
> /usr/local/Cellar/ruby/2.0.0-p195/bin/bundle exec rake
> dailyTask:dataParse --trace >> /tmp/cron-test.out
> /usr/local/Cellar/ruby/2.0.0-p195/lib/ruby/gems/2.0.0/gems/mysql2-0.3.13/lib/mysql2/mysql2.bundle:
> [BUG] Segmentation fault
> ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
>
> I look around for segmentation fault problem. Most posts suggests
> RVM or rbenv to swap Ruby version. None of the posts looks relevant to
> me since I can directly execute under terminal environment.
>
> OS: MAC OSX 10.8.4
> Ruby version: 2.0.0p195
> Bundler version: 1.3.5
> Rake version: 10.0.4
>
> The relevant part of my plist file is as following:
> <key>ProgramArguments</key>
> <array>
> <string>/bin/bash</string>
> <string>crontab-test.sh</string>
> </array>
>
> Hope someone can give me the right direction to continue. Many
> thanks!

Using launchd is much like using cron on linux: there is no (or barely any) predefined environment like you have in Terminal. Thus you have to provide all the information that will be needed to make sure your script runs correctly. This is includes running whatever is needed to set the right version and source of ruby for that launcher.

Since OS/X ships with 1.8.7 as the system ruby, that is the one used by launchd. If you require a different version (and you do if you want to use any gems you've installed for that different version), you have to wrap your ruby script in something that will initialize the environment. I haven't tried this, but it might just be enough to add —init-file /Users/youruser/.bash_profile to the argument list above, depending on how you have things configured.



--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/4AAE71A9-EB88-4992-8512-FD0D98CD10E7%40gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments:

Post a Comment