Excon::Errors::SocketError Broken pipe (Errno::EPIPE) – Ruby on Rails

Hey everyone,

I was having a bit of trouble with CarrierWave on Amazon S3 today. When attempting to upload files that were larger than ~150kb I received one of the following errors (depending on config):

getaddrinfo: Name or service not known carrierwave
Excon::Errors::SocketError in PhotosController#create
Broken pipe (Errno::EPIPE)

 

Despite the vague error, the solution was fairly simple. The region configured in my initialiser was different to the one my bucket was created in.

In order to find out which region you need, logon to your AWS console and browse to an uploaded image. Check the endpoint URL (properties > static website hosting) and simply copy the region. For examples:

Endpoint: testbucket123321.s3-website-us-west-2.amazonaws.com
Region: us-west-2

A couple of final tips if this doesn’t work for you:

  • You need the region codes, not the name. For instance, “Oregon” won’t work
  • Don’t forget to restart your app after making changes to the initialiser
  •  

    Assets:Precompile (Rake Aborted) – Heroku

    Hey everyone,

    I ran into the following error over the weekend while trying to push to heroku:

    Running: rake assets:precompile
    rake aborted!
    could not connect to server: Connection refused
    Is the server running on host “127.0.0.1” and accepting
    TCP/IP connections on port 5432?

    This stackoverflow post helped to solve the issue. All you need to do is add the following line to your application.rb file:

    #Applicication.rb
    config.assets.initialize_on_precompile = false
    

    Let me know if you have any problems.

    Installing SQL Developer on Ubuntu – make-sqldeveloper-package chmod: missing operand after `755′

    Hey everyone,

    I was following a guide while trying to install SQL Developer on Ubuntu, however I ran into the following error:

    make-sqldeveloper-package chmod: missing operand after `755′

     

    To fix it, simply change line number #381 in ‘/usr/bin /make-sqldeveloper-package’ as follows:

    Original

    ${FIND} "${OPTDIR}" ! ( -type d -o -name "*.jar" ) |${XARGS} ${XARGS_OPTS} ${FILE} ${FILE_OPTS} |${GREP} ${GREP_OPTS} "shell script text executable" |${CUT} ${CUT_OPTS_FUNC_CLEAN} |${XARGS} ${XARGS_OPTS} ${CHMOD} ${CHMOD_OPTS}
    

    Modified

    ${FIND} "${OPTDIR}" ! ( -type d -o -name "*.jar" ) |${XARGS} ${XARGS_OPTS} ${FILE} ${FILE_OPTS} |${GREP} ${GREP_OPTS} "shell script" | ${GREP} ${GREP_OPTS} "text executable" |${CUT} ${CUT_OPTS_FUNC_CLEAN} |${XARGS} ${XARGS_OPTS} ${CHMOD} ${CHMOD_OPTS}
    

    Thanks to this blog post for the solution, just note that it is Polish.

    Let me know if you have any issues!

    WARN Could not determine content-length of response body – Ruby on Rails

    Hey everyone

    I was going through my development logs today and noticed that the following line was appearing everywhere:

    WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
    

    While nothing appeared to be wrong, it made the logs a lot harder to read. A stackoverflow post indicates that this is a webrick issue that can be avoided by switching to thin. This is also the recommended option for heroku. In order to use thin, you simply need to add it to your Gemfile:

    #Gemfile
    
    #Added gems
    gem 'therubyracer' #JavaScript
    gem 'thin' #Instead of webrick
    

    Run bundle install

    chris@chris-VirtualBox:~/calendar$ bundle install
    Fetching gem metadata from https://rubygems.org/...........
    Fetching gem metadata from https://rubygems.org/..
    Using rake (10.0.2) 
    Using i18n (0.6.1) 
    Using multi_json (1.4.0) 
    Using activesupport (3.2.9) 
    Using builder (3.0.4) 
    Using activemodel (3.2.9) 
    Using erubis (2.7.0) 
    Using journey (1.0.4) 
    Using rack (1.4.1) 
    Using rack-cache (1.2) 
    Using rack-test (0.6.2) 
    Using hike (1.2.1) 
    Using tilt (1.3.3) 
    Using sprockets (2.2.2) 
    Using actionpack (3.2.9) 
    Using mime-types (1.19) 
    Using polyglot (0.3.3) 
    Using treetop (1.4.12) 
    Using mail (2.4.4) 
    Using actionmailer (3.2.9) 
    Using arel (3.0.2) 
    Using tzinfo (0.3.35) 
    Using activerecord (3.2.9) 
    Using activeresource (3.2.9) 
    Using bcrypt-ruby (3.0.1) 
    Using bundler (1.2.3) 
    Using coffee-script-source (1.4.0) 
    Using execjs (1.4.0) 
    Using coffee-script (2.2.0) 
    Using rack-ssl (1.3.2) 
    Using json (1.7.5) 
    Using rdoc (3.12) 
    Using thor (0.16.0) 
    Using railties (3.2.9) 
    Using coffee-rails (3.2.2) 
    Installing daemons (1.1.9) 
    Installing eventmachine (1.0.0) with native extensions 
    Using jquery-rails (2.1.4) 
    Using libv8 (3.3.10.4) 
    Using pg (0.14.1) 
    Using rails (3.2.9) 
    Using sass (3.2.3) 
    Using sass-rails (3.2.5) 
    Using therubyracer (0.10.2) 
    Installing thin (1.5.0) with native extensions 
    Using uglifier (1.3.0) 
    Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
    

    And finally start thin:

    chris@chris-VirtualBox:~/calendar$ rails s thin
    => Booting Thin
    => Rails 3.2.9 application starting in development on http://0.0.0.0:3000
    => Call with -d to detach
    => Ctrl-C to shutdown server
    >> Thin web server (v1.5.0 codename Knife)
    >> Maximum connections set to 1024
    >> Listening on 0.0.0.0:3000, CTRL+C to stop
    

    If you’d prefer to keep using Webrick, the following patch is said to resolve the issue:
    https://bugs.ruby-lang.org/attachments/2300/204_304_keep_alive.patch

    Events Only Showing in Month View – FullCalendar

    Hey everyone,

    Ran into a bit of a problem with FullCalendar today after setting up a JSON feed. My events were only appearing in the month view. This StackOverflow post explains that this is due to the fact that the allDay property wasn’t set.

    Original JSON

    [
        "0",
        {
            "title": "Test event",
            "id": "821",
            "start": "2012-11-23 14:00:00",
            "end": "2012-11-23 15:00:00"        
        },
        "1",
        {
            "title": "Test event 2",
            "id": "822",        
            "start": "2012-11-23 9:00:00",
            "end": "2012-11-23 10:00:00"
        },
        "2",
        {
            "title": "Test event 3",
            "id": "823",        
            "start": "2012-11-24 8:00:00",
            "end": "2012-11-24 6:00:00"
        },
        "3",
        {
            "title": "Test event 4",
            "id": "824",        
            "start": "2012-11-27 6:00:00",
            "end": "2012-11-27 7:00:00"
        }
    ]
    

    Working JSON

    [
        "0",
        {
            "allDay": "",
            "title": "Test event",
            "id": "821",
            "start": "2012-11-23 14:00:00",
            "end": "2012-11-23 15:00:00"        
        },
        "1",
        {
            "allDay": "",
            "title": "Test event 2",
            "id": "822",        
            "start": "2012-11-23 9:00:00",
            "end": "2012-11-23 10:00:00"
        },
        "2",
        {
            "allDay": "",
            "title": "Test event 3",
            "id": "823",        
            "start": "2012-11-24 8:00:00",
            "end": "2012-11-24 6:00:00"
        },
        "3",
        {
            "allDay": "",
            "title": "Test event 4",
            "id": "824",        
            "start": "2012-11-27 6:00:00",
            "end": "2012-11-27 7:00:00"
        }
    ]
    

    The Name is Either Already Used or Reserved by Ruby on Rails

    Hey everyone,

    I ran into the following error while attempting to create a new model called calendar today:

    chris@chris-VirtualBox:~/calendar$ rails g model calendar
          invoke  active_record
          The name 'Calendar' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.
    

    It turns out that this was due to the fact that my application was also called Calendar. In order to get around this I decided to rename the application. This required a little bit of searching and thanks to this Stackoverflow post I found references in the following files:

    – config/application.rb
    – config/environment.rb
    – config/environments/development.rb
    – config/environments/production.rb
    – config/environments/test.rb
    – config/initializers/secret_token.rb
    – config/initializers/session_store.rb
    – config/mongoid.yml (if using Mongoid)
    – config/routes.rb
    – config.ru
    – Rakefile
    – app/views/layouts/application.html.erb, in title tag
    – initializers/secret_token.rb
    – initializers/session_store.rb

    Let me know if you find any more spots that I’ve missed!

    Fields Missing from jQuery Post – Serialize Data

    Hey everyone,

    I was using jquery’s serialize method to post completed form data only to find that a number of my fields were missing.

    
                    //Display loader and disable forms
    		disable_form_fields(true);
    
                    //Post via ajax
    		$.ajax({
    			type: 'POST',
    			url: 'uploads/add',
    			data: $(form).serialize(),
    			success: function(data, text_status, oHTTP){
    				handle_form_response(data, text_status, oHTTP, $(form).data('file_id'))
    			},
    			error: function(){
    
    				//Hide loader etc
    				set_form_loading(false);
    
    				//Unspecified error
    				alert('An error has occurred.');
    			},
    			dataType: 'json'			
    		});
    

    Thanks to this stackoverflow post I realised that the data wasn’t being serialised because I’d disabled most of the fields beforehand. This was done in order to prevent the user from changing the values. To get around this I simply had to serialise the data BEFORE disabling anything.

    
                    //Post via ajax
    		$.ajax({
    			type: 'POST',
    			url: 'uploads/add',
    			data: $(form).serialize(),
    			success: function(data, text_status, oHTTP){
    				handle_form_response(data, text_status, oHTTP, $(form).data('file_id'))
    			},
    			error: function(){
    
    				//Hide loader etc
    				set_form_loading(false);
    
    				//Unspecified error
    				alert('An error has occurred.');
    			},
    			dataType: 'json'			
    		});
    
                   //Display loader and disable forms - DO THIS AFTER SERIALISING
    		disable_form_fields(true);
    

    Let me know if you have any issues.

    jQuery DateTimePicker with Bootstrap

    Hey everyone,

    I ran into a bit of trouble today trying to get datetimepicker to work within bootstrap tabs. The dialog appeared however none of the buttons seemed to work. The fields also remained unpopulated.

    It turned out the the issue was caused by the fact that I’d used jquery’s clone function to duplicate the tabs without reassigning field ids. This meant that there were multiple fields with the same id, confusing datetimepicker.

    The solution I used was to dynamically assign all of the ids as each tab was displayed:

    
    /* Bind tab change events: this has been done so that there is less js overhead */
    function bind_tab_change_events(){
    
    	//Bind change event
    	$('.nav-tabs').bind('show', function(e){
    
    		//Create vars
    		var selected_file_id = $(e.target).data('file_id');
    
    		//Initialisations
    		initialise_time_pickers('#file_' + selected_file_id + ' .timepicker', selected_file_id);	
    	})
    }
    
    /* Initalise timepickers */
    function initialise_time_pickers(selector, unique_id){
    
    	//Loop through each bound element
    	$.each($(selector), function(index, value){
    
    		//Set id - datepicker won't work without unique ids
    		$(value).attr('id', $(value).attr('id') + '_' + unique_id);
    
    		//Initialise datepicker		
    		$(value).datetimepicker();
    	});
    }
    

    UPDATE:
    It looks like quite a few people hitting this post are looking for a bootstrap specific alternative, Sebastien has provided a link to one in the comments below:
    Bootstrap DatetimePicker.

    Another one that looks really good, a bit less clunky than any of the alternatives I’ve seen: http://tarruda.github.com/bootstrap-datetimepicker/

    Plain timepicker: http://jdewit.github.com/bootstrap-timepicker/

    Plain datepicker: http://www.eyecon.ro/bootstrap-datepicker/

    Let me know if you have any questions!

    preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash – CakePHP

    Hey everyone,

    Ran into the following error while I was mucking around with CakePHP today:

    
    preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash
    
    

    The error seemed a little weird as I wasn’t using any regex. It turned out that it was because of my custom validation methods. I had marked them as private instead of public. A bit of an ambiguous error message so hopefully this will be able to help some of you out!

    Paypal_Adaptive IPN Verification: INVALID – Ruby on Rails

    Hey everyone,

    I’ve been working with the PayPal_Adaptive gem recently and unfortunately I’ve run into a few issues. The latest of these has been that that my IPN verification was returning an INVALID response from Paypal.

    I had made a few modifications to the provided payment_notification.rb file in order to accommodate for a few app specific requirements. This left me having to pass the original data attribute params. Unfortunately this wasn’t identical to the response that PayPal expected, I actually needed to use the following:

    
    #Incorrect usage
    verify_ipn(params)
    
    #Correct usage
    verify_ipn(request.raw_post)
    

    I realised this error after reading Tanel’s post about securing your IPN interactions so make sure you check out his blog if you run into any more problems!

    Thanks,
    Chris