Новые поля работают на localhost, но не на Heroku

#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 , которую вы можете использовать для переноса и перезапуска одной командой.