<p>So I'm trying to run OSM in docker with latest master.</p>
<p>I downloaded and imported database for Monaco because it's small (<a href="http://download.geofabrik.de/europe/monaco-latest.osm.pbf" rel="nofollow">http://download.geofabrik.de/europe/monaco-latest.osm.pbf</a>)</p>
<p>I'm running it on top of <code>phusion/passenger</code>.</p>
<p>Dockerfile looks like:</p>
<div class="highlight highlight-source-dockerfile"><pre><span class="pl-k">FROM</span> phusion/passenger-ruby24
<span class="pl-k">COPY</span> --chown=app:app ./osm /home/app/osm
<span class="pl-k">WORKDIR</span> /home/app/osm
<span class="pl-k">RUN</span> echo <span class="pl-s">"gem 'tzinfo-data'"</span> >> Gemfile
<span class="pl-k">RUN</span> bundle install
<span class="pl-k">RUN</span> apt-get update && apt-get install -y libv8-dev osmosis postgresql-client
<span class="pl-c"><span class="pl-c">#</span> needed for successful assets precompile</span>
<span class="pl-k">RUN</span> cp config/example.application.yml config/application.yml
<span class="pl-k">RUN</span> cp config/example.database.yml config/database.yml
<span class="pl-k">RUN</span> bundle exec rake i18n:js:export
<span class="pl-k">RUN</span> bundle exec rake assets:precompile
<span class="pl-k">RUN</span> chown -R app:app /home/app/osm/tmp
<span class="pl-k">RUN</span> rm -f /etc/service/nginx/down
<span class="pl-k">RUN</span> rm /etc/nginx/sites-enabled/default
<span class="pl-k">ADD</span> osm.conf /etc/nginx/sites-enabled/osm.conf
<span class="pl-k">RUN</span> apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
<span class="pl-k">RUN</span> curl -o /home/app/monaco.osm.pbf http://download.geofabrik.de/europe/monaco-latest.osm.pbf
<span class="pl-k">ADD</span> ./docker/Application/bin/configure.sh /etc/my_init.d/configure.sh
<span class="pl-k">ADD</span> ./docker/Application/bin/migrate.sh /home/app/migrate.sh
<span class="pl-k">RUN</span> chmod +x /etc/my_init.d/configure.sh && chmod +x /home/app/migrate.sh
<span class="pl-k">CMD</span> [<span class="pl-s">"/sbin/my_init"</span>]</pre></div>
<p><code>configure.sh</code> configures <code>database.yml</code> and <code>application.yml</code> and <code>migration.sh</code> create functions, extensions and migrate data using osmosis:</p>
<div class="highlight highlight-source-shell"><pre>osmosis --read-pbf /home/app/monaco.osm.pbf --log-progress --write-apidb database=<span class="pl-smi">$POSTGRES_DB</span> host=<span class="pl-smi">$POSTGRES_HOST</span>:<span class="pl-smi">$POSTGRES_PORT</span> validateSchemaVersion=no user=<span class="pl-smi">$POSTGRES_USER</span> password=<span class="pl-smi">$POSTGRES_PASSWORD</span> dbType=postgresql</pre></div>
<p>I see an error when trying to open relation <code>/relation/2220322</code>:</p>
<pre><code>Started GET "/relation/2220322" for 172.27.0.1 at 2018-09-10 06:23:11 +0000
Processing by BrowseController#relation as HTML
Parameters: {"id"=>"2220322"}
Rendering browse/feature.html.erb within layouts/map
Rendered collection of browse/_tag.html.erb [145 times] (23.5ms)
Rendered browse/_tag_details.html.erb (30.8ms)
Rendered browse/_common_details.html.erb (43.1ms)
Rendered collection of browse/_relation_member.html.erb [36 times] (70.3ms)
Rendered browse/_relation.html.erb (120.0ms)
Rendered browse/feature.html.erb within layouts/map (127.2ms)
Completed 500 Internal Server Error in 322ms (ActiveRecord: 51.4ms)
ActionView::Template::Error (undefined method `redacted?' for nil:NilClass):
1: <%
2: member_class = link_class(relation_member.member_type.downcase, relation_member.member)
3: linked_name = link_to printable_name(relation_member.member), { :action => relation_member.member_type.downcase, :id => relation_member.member_id.to_s }, :title => link_title(relation_member.member), :rel => link_follow(relation_member.member)
4: type_str = t '.type.' + relation_member.member_type.downcase
5: %>
app/helpers/browse_helper.rb:35:in `link_class'
</code></pre>
<p>The error happening in <code>app/views/browse/_relation_member.html.erb</code> because helper method <code>app/helpers/browse_helper.rb</code> trying to call <code>redacted?</code>:</p>
<div class="highlight highlight-source-ruby"><pre> <span class="pl-k">def</span> <span class="pl-en">link_class</span>(<span class="pl-smi">type</span>, <span class="pl-smi">object</span>)
classes <span class="pl-k">=</span> [type]
<span class="pl-k">if</span> object.redacted?
classes <span class="pl-k"><<</span> <span class="pl-s"><span class="pl-pds">"</span>deleted<span class="pl-pds">"</span></span>
<span class="pl-k">else</span>
classes <span class="pl-k">+=</span> icon_tags(object).flatten.map { |<span class="pl-smi">t</span>| h(t) }
classes <span class="pl-k"><<</span> <span class="pl-s"><span class="pl-pds">"</span>deleted<span class="pl-pds">"</span></span> <span class="pl-k">unless</span> object.visible?
<span class="pl-k">end</span>
classes.join(<span class="pl-s"><span class="pl-pds">"</span> <span class="pl-pds">"</span></span>)
<span class="pl-k">end</span></pre></div>
<p><code>_relation_member.html.erb</code> rendered by <code>_relation.html.erb</code>:</p>
<div class="highlight highlight-source-ruby"><pre> <span class="pl-k"><</span><span class="pl-k">%</span> <span class="pl-k">unless</span> relation.relation_members.empty? <span class="pl-s"><span class="pl-pds">%></span></span>
<span class="pl-s"> <h4<span class="pl-pds">></span></span><span class="pl-k"><</span><span class="pl-k">%=</span> t <span class="pl-s"><span class="pl-pds">'</span>.members<span class="pl-pds">'</span></span> <span class="pl-s"><span class="pl-pds">%></span></h4<span class="pl-pds">></span></span>
<span class="pl-k"><</span>ul><span class="pl-k"><</span><span class="pl-k">%=</span> render <span class="pl-c1">:partial</span> => <span class="pl-s"><span class="pl-pds">"</span>relation_member<span class="pl-pds">"</span></span>, <span class="pl-c1">:collection</span> => relation.relation_members <span class="pl-s"><span class="pl-pds">%></span></ul<span class="pl-pds">></span></span>
<span class="pl-k"><</span><span class="pl-k">%</span> <span class="pl-k">end</span> <span class="pl-s"><span class="pl-pds">%></span></span></pre></div>
<p>But in the console I found that not every <code>relation_member</code> has a <code>member</code>:</p>
<div class="highlight highlight-source-ruby"><pre><span class="pl-c1">Loading</span> production environment (<span class="pl-c1">Rails</span> <span class="pl-c1">5.2</span>.<span class="pl-c1">0</span>)
<span class="pl-c1">2.4</span>.<span class="pl-c1">4</span> :<span class="pl-c1">001</span> <span class="pl-k">></span> r <span class="pl-k">=</span> <span class="pl-c1">Relation</span>.preload(<span class="pl-c1">:relation_tags</span>, <span class="pl-c1">:containing_relation_members</span>, <span class="pl-c1">:changeset</span> => [<span class="pl-c1">:changeset_tags</span>, <span class="pl-c1">:user</span>], <span class="pl-c1">:relation_members</span> => <span class="pl-c1">:member</span>).find(<span class="pl-s"><span class="pl-pds">"</span>2220322<span class="pl-pds">"</span></span>)
=> <span class="pl-c"><span class="pl-c">#</span><Relation id: 2220322, changeset_id: 0, timestamp: "2018-05-04 10:30:32", visible: true, version: 25></span>
<span class="pl-c1">2.4</span>.<span class="pl-c1">4</span> :<span class="pl-c1">002</span> <span class="pl-k">></span> r.relation_members.empty?
=> <span class="pl-c1">false</span>
<span class="pl-c1">2.4</span>.<span class="pl-c1">4</span> :<span class="pl-c1">003</span> <span class="pl-k">></span> r.relation_members[<span class="pl-c1">25</span>].member
=> <span class="pl-c1">nil</span>
<span class="pl-c1">2.4</span>.<span class="pl-c1">4</span> :<span class="pl-c1">004</span> <span class="pl-k">></span> r.relation_members[<span class="pl-c1">0</span>].member
=> <span class="pl-c"><span class="pl-c">#</span><Relation id: 5986436, changeset_id: 0, timestamp: "2016-05-18 07:21:05", visible: true, version: 3></span></pre></div>
<p>Which looks like a bug to me. I would be happy to send PR to fix it but I have no idea what is the logic should be.</p>
<p>Shall we just skip <code>relation_members</code> without <code>member</code>s ?</p>
<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/openstreetmap/openstreetmap-website/issues/1988">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/ABWnLcz7TTGBExaJvxSJ1WFqhfNEVU1tks5uZhgGgaJpZM4Wg3ow">mute the thread</a>.<img src="https://github.com/notifications/beacon/ABWnLZGeKmG5zeQDpOeOB_GQok1zBr-mks5uZhgGgaJpZM4Wg3ow.gif" height="1" width="1" alt="" /></p>
<script type="application/json" data-scope="inboxmarkup">{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/openstreetmap/openstreetmap-website","title":"openstreetmap/openstreetmap-website","subtitle":"GitHub repository","main_image_url":"https://assets-cdn.github.com/images/email/message_cards/header.png","avatar_image_url":"https://assets-cdn.github.com/images/email/message_cards/avatar.png","action":{"name":"Open in GitHub","url":"https://github.com/openstreetmap/openstreetmap-website"}},"updates":{"snippets":[{"icon":"DESCRIPTION","message":"ActionView::Template::Error (undefined method `redacted?' for nil:NilClass) in app/views/browse/_relation_member.html.erb (#1988)"}],"action":{"name":"View Issue","url":"https://github.com/openstreetmap/openstreetmap-website/issues/1988"}}}</script>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/openstreetmap/openstreetmap-website/issues/1988",
"url": "https://github.com/openstreetmap/openstreetmap-website/issues/1988",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
},
{
"@type": "MessageCard",
"@context": "http://schema.org/extensions",
"hideOriginalBody": "false",
"originator": "AF6C5A86-E920-430C-9C59-A73278B5EFEB",
"title": "ActionView::Template::Error (undefined method `redacted?' for nil:NilClass) in app/views/browse/_relation_member.html.erb (#1988)",
"sections": [
{
"text": "",
"activityTitle": "**Simon Gabyshev**",
"activityImage": "https://assets-cdn.github.com/images/email/message_cards/avatar.png",
"activitySubtitle": "@gabyshev",
"facts": [
{
"name": "Repository: ",
"value": "openstreetmap/openstreetmap-website"
},
{
"name": "Issue #: ",
"value": 1988
}
]
}
],
"potentialAction": [
{
"name": "Add a comment",
"@type": "ActionCard",
"inputs": [
{
"isMultiLine": true,
"@type": "TextInput",
"id": "IssueComment",
"isRequired": false
}
],
"actions": [
{
"name": "Comment",
"@type": "HttpPOST",
"target": "https://api.github.com",
"body": "{\n\"commandName\": \"IssueComment\",\n\"repositoryFullName\": \"openstreetmap/openstreetmap-website\",\n\"issueId\": 1988,\n\"IssueComment\": \"{{IssueComment.value}}\"\n}"
}
]
},
{
"name": "Close issue",
"@type": "HttpPOST",
"target": "https://api.github.com",
"body": "{\n\"commandName\": \"IssueClose\",\n\"repositoryFullName\": \"openstreetmap/openstreetmap-website\",\n\"issueId\": 1988\n}"
},
{
"targets": [
{
"os": "default",
"uri": "https://github.com/openstreetmap/openstreetmap-website/issues/1988"
}
],
"@type": "OpenUri",
"name": "View on GitHub"
},
{
"name": "Unsubscribe",
"@type": "HttpPOST",
"target": "https://api.github.com",
"body": "{\n\"commandName\": \"MuteNotification\",\n\"threadId\": 377715248\n}"
}
],
"themeColor": "26292E"
}
]</script>