I have a Rails application where I make use of the gem "fast_trie". This has a dependency on libdatrie. The gem installs fine on my dev machine (osx), but it fails when I try to deploy to our production servers (Running Ubuntu). I believe the problem is that the ruby gem depends on an older version of libdatrie. I need help to figure out how to get it built on my server.
Some information to go on:
root@stage:/tmp# uname -a
Linux ip-172-31-27-124 3.11.0-4-generic #9-Ubuntu SMP Mon Aug 26 15:21:06 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
root@stage:/tmp# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 13.10
Release: 13.10
Codename: saucy
root@stage:/tmp# ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
root@stage:/tmp# gem install fast_trie -v '0.5.0'
Building native extensions. This could take a while...
ERROR: Error installing fast_trie:
ERROR: Failed to build gem native extension.
/usr/bin/ruby1.9.1 -r ./[login to view URL] [login to view URL]
creating Makefile
make clean
make
compiling tail.c
tail.c: In function ‘tail_read’:
tail.c:111:9: warning: passing argument 2 of ‘file_read_int32’ from incompatible pointer type [enabled by default]
file_read_int32 (file, &t->tails[i].data);
^
In file included from tail.c:13:0:
fileutils.h:20:8: note: expected ‘int32 *’ but argument is of type ‘TrieData *’
Bool file_read_int32 (FILE *file, int32 *o_val);
^
compiling darray.c
compiling trie.c
trie.c: In function ‘raise_ioerror’:
trie.c:24:5: error: format not a string literal and no format arguments [-Werror=format-security]
rb_raise(rb_eIOError, message);
^
trie.c: In function ‘rb_trie_has_key’:
trie.c:84:5: warning: implicit declaration of function ‘trie_has_key’ [-Wimplicit-function-declaration]
if(trie_has_key(trie, (TrieChar*)RSTRING_PTR(key)))
^
trie.c: In function ‘walk_all_paths’:
trie.c:180:1: warning: no return statement in function returning non-void [-Wreturn-type]
}
^
trie.c: In function ‘walk_all_paths_with_values’:
trie.c:258:1: warning: no return statement in function returning non-void [-Wreturn-type]
}
^
In file included from trie.c:2:0:
trie.c: At top level:
trie.h:25:13: warning: ‘trie_branch_in_branch’ declared ‘static’ but never defined [-Wunused-function]
static Bool trie_branch_in_branch (Trie *trie, TrieIndex sep_node, const TrieChar *suffix, TrieData data);
^
trie.h:26:13: warning: ‘trie_branch_in_tail’ declared ‘static’ but never defined [-Wunused-function]
static Bool trie_branch_in_tail(Trie *trie, TrieIndex sep_node, const TrieChar *suffix, TrieData data);
^
trie.h:31:20: warning: ‘trie_state_new’ declared ‘static’ but never defined [-Wunused-function]
static TrieState * trie_state_new (const Trie *trie, TrieIndex index, short suffix_idx, short is_suffix);
^
cc1: some warnings being treated as errors
make: *** [trie.o] Error 1
make failed, exit code 2
Gem files will remain installed in /usr/lib/ruby/gems/1.9.1/gems/fast_trie-0.5.0 for inspection.
Results logged to /usr/lib/ruby/gems/1.9.1/extensions/x86_64-linux/1.9.1/fast_trie-0.5.0/[login to view URL]
Note that this is a slightly dated version of Ubuntu (13.10)
I just installed fast_trie on my ubuntu 13.10. And it installed successfully. So, Most probably you are missing some packages like ruby-dev or similar. If you want, I can help you installing it.
output of my server
root@localhost:~# gem install fast_trie
Fetching: [login to view URL] (100%)
Building native extensions. This could take a while...
Successfully installed fast_trie-0.5.0
Parsing documentation for fast_trie-0.5.0
Installing ri documentation for fast_trie-0.5.0
Done installing documentation for fast_trie after 1 seconds
1 gem installed
root@localhost:~#