在Heroku上部署了用Ruby On Rails编写的Web应用程序(在线商店)后,不显示数据库中的产品。我部署并使用“ git push heroku master”和“ heroku run rails db:migrate”迁移了数据库。我正在使用PostgreSQL和Paperclip gem进行图像上传。
我尝试从已部署的应用程序上载新产品,并且它可以正常工作。
<% @products.each do |product| %>
<div class="col-lg-4 col-md-6 mb-4">
<div class="cart h-100">
<% if product.image.present? %>
<%= link_to image_tag(product.image.url(:thumb)), product_path(product)%>
<% end %>
<div class="card-body">
<h4 class="card-title"><%= product.name %></h4>
<h5><%= product.price %></h5>
<p class="card-text"><%= product.description %></p>
</div>
<div class="card-footer">
<% if current_user && current_user.admin? %>
<%= link_to 'Edit', edit_product_path(product) %>
<%= link_to 'Delete', product_path(product), method: :delete, data: { confirm: 'Are you sure?' } %>
<% elsif current_user && !current_user.admin %>
<%= form_tag(line_items_path(product_id: product.id)) do %>
<%= number_field_tag(:quantity, 1) %>
<%= submit_tag('Add to shopping cart') %>
<% end %>
<% elsif !user_signed_in? %>
<% end %>
</div>
</div>
</div>
<% end %>
我希望从数据库中显示项目,但是在迁移之后,产品仍然缺失,我只能从已部署的应用程序中添加它们。
默认情况下,您的数据库在各种Rails环境之间是完全独立的:您在本地计算机上执行的任何操作都仅存在于本地计算机上,而不存在于Heroku上(反之亦然)。 (毕竟,您不希望您的测试产品出现在您的实时商店中。)
如果您始终需要存在特定的数据库记录-无论是在本地开发机器上,在测试环境中还是在Heroku上的生产环境中-这就是Active Record "seed" feature存在的原因。