#ruby-on-rails #heroku
#ruby-on-rails #heroku
Вопрос:
Недавно я добавил поля image_url
и pin1
through pin4
в blogs
таблицу моего приложения Rails.
Я добавил их в схему:
create_table "blogs", force: :cascade do |t|
t.string "title"
t.string "teaser"
t.text "body"
t.boolean "published", default: false
t.datetime "published_at"
t.string "video_url"
t.bigint "spree_user_id", null: false
t.bigint "resource_id", null: false
t.string "slug"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.string "image_url"
t.string "pin1"
t.string "pin2"
t.string "pin3"
t.string "pin4"
t.index ["resource_id"], name: "index_blogs_on_resource_id"
t.index ["spree_user_id"], name: "index_blogs_on_spree_user_id"
Я добавил их в параметры контроллера:
def blog_params
params.require(:blog).permit(
:title,
:teaser,
:body,
:image,
:published,
:published_at,
:subcategory_ids,
:image_url,
:video_url,
:pin1,
:pin2,
:pin3,
:pin4,
:user_id,
:resource_id,
:slug
)
end
И к форме:
<%= form.label :image_url %>
<%= form.text_field :image_url, class: "form-control" %>
...
<%= form.label "Pinterest Pin Url 1" %>
<%= form.text_field :pin1, class: "form-control" %>
Все работает отлично, и они отображаются на моем localhost:
<% if @blog.pin1 %>
<%= image_tag @blog.pin1, class: "pin shadow-bottom", style: "display: inline-block" %>
<% end %>
Но на Heroku значения не сохраняются. Я не получаю никаких ошибок, журнала сервера или чего-либо еще. Я сделал heroku run rake db:migrate
без ошибок.
Кто-нибудь может увидеть, что происходит не так?
Комментарии:
1. Вы выполнили миграцию на Heroku после загрузки новых файлов миграции, правильно?
2. @RockwellRice Да, я сделал
heroku run rake db:migrate
и дважды проверил, что соответствующие поля появились вheroku run rails c
.3. @dbugger Я добавил столбцы в свою существующую
blog
таблицу, но в новой миграции, а не в измененной, которая уже была перенесена.4. @dbugger Я думаю, что это взято из
schema.rb
файла в качестве доказательства того, что обновление произошло.
Ответ №1:
Вы можете немного проверить свою базу данных с помощью psql
:
heroku pg:psql
После того, как появится SQL-запрос, вы можете просмотреть свою таблицу, чтобы увидеть, были ли применены изменения:
d blogs
Следует отметить, что в рабочей среде Rails будет кэшировать схему вашей базы данных при загрузке приложения, поэтому, если вы выполнили свои миграции, но не перезапускали свое приложение с момента запуска миграций с rake db:migrate
, ActiveRecord не будет знать о новых полях. Вы можете перезапустить приложение с помощью heroku restart
, а затем проверить, имеет ли это значение.
Комментарии:
1.
heroku restart
Это сработало! Это настолько нелепо, что я столько старался только для того, чтобы «выключить, а затем снова включить» все исправило. Будь вы прокляты, компьютеры!2. Я помогаю поддерживать небольшую библиотеку под названием parity , которую вы можете использовать для переноса и перезапуска одной командой.