Данные JSON, отображаемые в разработке должным образом, но в производстве не отображаются должным образом - PullRequest
0 голосов
/ 22 мая 2018

Это мой route.rb

namespace :api do
    get 'suggestions/jobs', to: "suggestions#jobs"
end

Мой контроллер

class Api::SuggestionsController < ApplicationController
    def jobs
        @jobs = Job.job_title_search(params[:q])   #.select(:title, :label).distinct
        if @jobs.present?
            render json: @jobs, status: :ok
        else
            render json: "Not Found", status: :ok
        end
    end
end

и модель

def self.job_title_search(q)
    where('title LIKE ?', "%#{q}%").select(:title, :label).distinct
end

в среде разработки типа localhost:3000/api/suggestions/jobs?q=dev данныхнапример,

[
    {"id":null,"title":"React Native Developer","label":"Top label job"},
    {"id":null,"title":"Android Developer","label":"Top label job"},
    {"id":null,"title":"Business Development Representative","label":"Mid label job"},
    {"id":null,"title":"Node.js Developer","label":"Top label job"}
]

, что означает, что он работает, но пока я нажимаю на Heroku, как example.herokuapp.com/api/suggestions/jobs?q=dev, он показывает

SyntaxError: JSON.parse: неожиданный символ в строке 1Столбец 1 данных JSON

Я знаю, что есть "Не найдено", как код

render json: "Not Found", status: :ok

Мой вопрос: почему тот же код не работает на Heroku?и что я могу сделать для этого?

the database.yml

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  database: my_project_production
  username: my_project
  password: <%= ENV['MY_PROJECT_DATABASE_PASSWORD'] %>

Любая помощь оценена.

Спасибо

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Посмотрите ключевое слово LIKE в SQL, если вы используете SQLite базу данных для development и PostgreSQL базу данных для production, то, возможно, это произошло, like работает в среде разработки и производственной средебудет ilike like не работает, OTOH, ilike не работает в SQLite.

Если так, то решение:

Решение 1 Вы можете изменить базу данных разработки на PostgreSQL, если вы беспокоитесь об изменении базы данных, выполните следующие действия:

Решение 2 Вы можете использовать lower(attr), как

def self.job_title_search(q)
    where('lower(title) LIKE lower(?)', "%#{q}%").select(:title, :label).distinct
end

Вы можете увидеть SO Ответ за это.

Надежда поможет.

0 голосов
/ 22 мая 2018

Ветвь if вашего кода в порядке, а поскольку dev содержит записи, она отображается без сбоев.

В prod, OTOH, нет записей, а else ветвь, которая не совсем корректна, старается отрендерить.И это терпит неудачу, давая вам ошибку.

Вместо этого поставьте хэш вместо:

else
  render json: {error: "Not Found"}, status: :ok
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...