2016-03-11 5 views
2

Я создаю API с Ruby on Rails.Рендеринг URL скрепки с помощью JBUILDER

У меня есть пользователи, у которых есть аватары, выполненные с использованием скрепки.

Я пытаюсь получить доступ к моим страницам скрепки в моем выпуске JSON, и он просто разбил мой экземпляр heroku. Это работает отлично на месте.

Отрывок моего пользователя Модель

class User < ActiveRecord::Base 

    has_attached_file :avatar, styles: { large: "600x600#", medium: "300x300#", thumb: "100x100#" }, default_url: "https://s3.amazonaws.com/whiztutor-marketing/photos/Profile300.png" 
    validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/ 

end 

Отрывок моего JBuilder для моего пользователя

json.cache! @user do 
    json.id @user.id 
    json.type @user.type 
    json.f_name @user.f_name 
    json.about @user.about 
    json.email @user.email 
    json.avatar_url @user.avatar.url(:medium) 
    json.referral_code @user.referral_code 
    json.education_level @user.education_level 
    json.photo_url @user.avatar.to_json 
    json.education_details @user.education_details.all 
    json.all_subjects @user.subjects.all 
    json.all_times @user.all_available_times.each do |time| 
    json.day time.schedule.to_s 
    json.time_block time.time_as_string 
    json.next_occurrence time.schedule.next_occurrence(Time.now) 
    end 
end 

Я попытался оборачивая в метод, как найти на this question и разбивает сервер точно так же. Я могу запустить консоль и напрямую обращаться к этим URL-адресам с сервером. Что-то с JBUILDER и PAPERCLIP просто не смешивается, и я, похоже, не могу понять его. Любая помощь приветствуется.

+1

Вы можете разместить сообщение об ошибке вы видите на Heroku? –

+0

Возможно, возникла проблема с конфигурацией учетных данных aws с помощью paperclip на вашем сервере. Не могли бы вы показать нам сообщение об ошибке и обратную линию? –

+0

Я не получаю заметных ошибок в моих журналах. Я знаю, что учетные данные AWS хороши, потому что я могу получить все URL-адреса на моей серверной консоли, а не только мою локальную консоль. Кроме того, я могу загружать фотографии без ошибок с использованием почтовых сообщений и кодировки base64.Все эти изображения не обнаруживают проблем в интерфейсе webapp на стороне сервера. Он специально извлекает URL-адрес для JBUILDER, который имеет проблемы. – JohnSalzarulo

ответ

2

Наконец диагностировали этот вопрос после нескольких часов исследований.

Проблема с «json.cache! @user do» - В частности, .cache! - Я хотел сохранить несколько циклов сервера и ускорить работу, так что я впервые начал реализовывать вещи.

Независимо от того, когда я обновил код JBUILDER до следующего, я больше не получаю 500 ошибок сервера.

Отрывок из моего рабочего JBuilder для моего пользователя

json.id @user.id 
json.type @user.type 
json.f_name @user.f_name 
json.about @user.about 
json.email @user.email 
json.small_photo @user.profile_url_small 
json.medium_photo @user.profile_url_medium 
json.referral_code @user.referral_code 
json.education_level @user.education_level 
json.education_details @user.education_details.all 
json.all_subjects @user.subjects.all 
json.all_times @user.all_available_times.each do |time| 
    json.day time.schedule.to_s 
    json.time_block time.time_as_string 
    json.next_occurrence time.schedule.next_occurrence(Time.now) 
end 
1

Трудно сказать, что эта проблема может быть, не зная ошибки, но эти вещи выглядят подозрительными или просто неправильно:

json.avatar_url @user.avatar.url(:medium) 
json.photo_url @user.avatar.to_json 

Второй собирается дать вам дополнительные кавычки вы, вероятно, не хотят , И почему есть оба?

Также здесь:

json.all_times @user.all_available_times.each do |time| 
    json.day time.schedule.to_s 
    json.time_block time.time_as_string 
    json.next_occurrence time.schedule.next_occurrence(Time.now) 
end 

Я думаю, что вы хотите:

json.all_times @user.all_available_times do |time| 
    json.day time.schedule.to_s 
    json.time_block time.time_as_string 
    json.next_occurrence time.schedule.next_occurrence(Time.now) 
end 
+0

Спасибо за ваше время, но не помогли мне с моей конкретной проблемой. – JohnSalzarulo

1

Вы можете попробовать это, чтобы получить URL в ответ JSON, это работает для меня поместил этот метод в вашей модели.

def avatar_url 
    avatar.url(:medium) 
end 

И этот метод вызывается из контроллера, Переопределелив to_json()

render :json => @friends.to_json(:methods => [:avatar_url]) 
Смежные вопросы