Question: Hi,

I am having problems with integrating sequenceserver (v. 1.14) that I am using on apache server with my own jbrowse on the same apache server. I did all (it seems so at least) what is written [here][1] .

Still - no links! Obviously, I am missing something basic here and will be very glad for your help!!!!
I am not an expert (to say the least) in ruby. Here is my links.rb file -

Hope I will find my mistake here...
THANKS!

module SequenceServer
# Module to contain methods for generating sequence retrieval links.
module Links
require 'erb'
# Provide a method to URL encode _query parameters_. See [1].
include ERB::Util
#
alias_method :encode, :url_encode

NCBI_ID_PATTERN = /gi\|(\d+)\|/
UNIPROT_ID_PATTERN = /sp\|(\w+)\|/
require 'json'
# Link generators return a Hash like below.
#
# {
# # Required. Display title.
# :title => "title",
#
# # Required. Generated url.
# :url => url,
#
# # Optional. Left-right order in which the link should appear.
# :order => num,
#
# # Optional. Classes, if any, to apply to the link.
# :class => "class1 class2",
#
# # Optional. Class name of a FontAwesome icon to use.
# :icon => "fa-icon-class"
# }
#
# If no url could be generated, return nil.
#
# Helper methods
# --------------
#
# Following helper methods are available to help with link generation.
#
# encode:
# URL encode query params.
#
# Don't use this function to encode the entire URL. Only params.
#
# e.g:
# sequence_id = encode sequence_id
# url = "http://www.ncbi.nlm.nih.gov/nucleotide/#{sequence_id}"
#
# querydb:
# Returns an array of databases that were used for BLASTing.
#
# whichdb:
# Returns the database from which the given hit came from.
#
# e.g:
#
# hit_database = whichdb
#
# Examples:
# ---------
# See methods provided by default for an example implementation.

def sequence_viewer
accession = encode self.accession
database_ids = encode querydb.map(&:id).join(' ')
url = "get_sequence/?sequence_ids=#{accession}" \
"&database_ids=#{database_ids}"

{
:order => 0,
:url => url,
:title => 'Sequence',
:class => 'view-sequence',
:icon => 'fa-eye'
}
end

def fasta_download
accession = encode self.accession
database_ids = encode querydb.map(&:id).join(' ')
url = "get_sequence/?sequence_ids=#{accession}" \
"&database_ids=#{database_ids}&download=fasta"

{
:order => 1,
:title => 'FASTA',
:url => url,
:class => 'download',
:icon => 'fa-download'
}
end

def ncbi
return nil unless id.match(NCBI_ID_PATTERN)
ncbi_id = Regexp.last_match[1]
ncbi_id = encode ncbi_id
url = "http://www.ncbi.nlm.nih.gov/#{querydb.first.type}/#{ncbi_id}"
{
:order => 2,
:title => 'NCBI',
:url => url,
:icon => 'fa-external-link'
}
end

def uniprot
return nil unless id.match(UNIPROT_ID_PATTERN)
uniprot_id = Regexp.last_match[1]
uniprot_id = encode uniprot_id
url = "http://www.uniprot.org/uniprot/#{uniprot_id}"
{
:order => 2,
:title => 'Uniprot',
:url => url,
:icon => 'fa-external-link'
}
end

def jbrowse
qstart = hsps.map(&:qstart).min
sstart = hsps.map(&:sstart).min
qend = hsps.map(&:qend).max
send = hsps.map(&:send).max
first_hit_start = hsps.map(&:sstart).at(0)
first_hit_end = hsps.map(&:send).at(0)
my_features = ERB::Util.url_encode(JSON.generate([{
:seq_id => accession,
:start => sstart,
:end => send,
:type => "match",
:subfeatures => hsps.map {
|hsp| {
:start => hsp.send < hsp.sstart ? hsp.send : hsp.sstart,
:end => hsp.send < hsp.sstart ? hsp.sstart : hsp.send,
:type => "match_part"
}
}
}]))
my_track = ERB::Util.url_encode(JSON.generate([
{
:label => "BLAST",
:key => "BLAST hits",
:type => "JBrowse/View/Track/CanvasFeatures",
:store => "url",
:glyph => "JBrowse/View/FeatureGlyph/Segments"
}
]))
url = "" \
"?loc=#{accession}:#{first_hit_start-500}..#{first_hit_start+500}" \
"&addFeatures=#{my_features}" \
"&addTracks=#{my_track}" \
"&tracks=BLAST" \
"&highlight=#{accession}:#{first_hit_start}..#{first_hit_end}"
{
:order => 2,
:title => 'JBrowse',
:url => url,
:icon => 'fa-external-link'
}
end
end
end

# [1]: https://stackoverflow.com/questions/2824126/whats-the-difference-between-uri-escape-and-cgi-escape

[1]: https://jbrowse.org/docs/faq.html#how-can-i-link-blast-results-to-jbrowse

Answer: For the sake of those who will read this - here is the answer:
I followed the tutorial here https://jbrowse.org/docs/faq.html#how-can-i-link-blast-results-to-jbrowse
and put links.rb file in installation directory /sequenceserver-1.0.14/lib/sequenceserver/ . I just added the bit that is shown on jbrowse tutorial to the existing links.rb and than added the path to the conf file in /etc/sequenceserver/. Also, note that the url in the bit to be added should be changed to your own jbrowse url. And it works fine now.