Closed lymecca closed 8 years ago
@lymecca Você verificou se seu servidor está com saída liberada na porta 80? Coloca aqui o código do seu controller onde está dando o erro.
@prodis obrigada pelo retorno. Vou verificar com o suporte da Maxihost. Segue o método que eu criei...
def frete
@base_product = BaseProduct.find(params[:id])
comprimento = @base_product.length < 16 ? 16 : @base_product.length
largura = @base_product.width < 18 ? 18 : @base_product.width
altura = @base_product.height < 9 ? 9 : @base_product.height
frete = Correios::Frete::Calculador.new :cep_origem => @base_product.endereco.cep,
:cep_destino => params[:frete][:cep_destino],
:peso => @base_product.weight,
:comprimento => comprimento,
:largura => largura,
:altura => altura
@servicos = frete.calcular :sedex, :pac
respond_to do |format|
format.json { render :show, status: :created, location: @servicos }
format.js { render :show, status: :created, location: @servicos }
end
end
@prodis olha a resposta que obtive do suporte da Maxihost...
No momento não temos bloqueios na porta 80, pode testar no link http://ping.eu/port-chk/ no entanto, em casos específicos, nosso anti DDoS pode interferir na conexão, para confirmarmos isso, precisa nos informar o IP externo que precisamos adicionar na whitelist para o acesso ao IP 189.1.164.103.
Qual seria esse ip externo que eles precisam?
O link que eles passaram é para testar entrada na porta 80 e não requisições externas a partir do seu servidor. Teste fazer uma requisição direta para o Web Service dos Correios: http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx. Faça também para qualquer outra URL e veja se o comportamento é o mesmo.
@prodis desculpe minha ignorância, como eu faço esse teste, é através de wget?
Você pode usar wget ou curl:
curl -i http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx
Ou então via Ruby mesmo:
require 'net/http'
require 'uri'
uri = URI.parse('http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx')
response = Net::HTTP.get_response(uri)
Tanto o servidor quanto a minha máquina retornaram a mesma coisa...
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 0
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
Set-Cookie: ASP.NET_SessionId=04fj2doxu4uwhrdgpwh143rg; path=/; HttpOnly
X-Powered-By: ASP.NET
Date: Wed, 01 Jul 2015 12:34:42 GMT
Lembrando que local(desenvolvimento) está funcionando normalmente, muito estranho!
Aqui vai o controller completo, se puder ajudar na análise, eu agradeço...
# -*- encoding : utf-8 -*-
class BaseProductsController < ApplicationController
load_and_authorize_resource param_method: :base_product_params, only: [:create, :edit, :update, :destroy]
before_action :set_base_product, only: [:edit, :update, :destroy, :delete_by_token]
before_action :set_categories, only: [:new, :edit]
before_action :set_maker, only: [:new, :edit]
before_action :set_albuns, only: [:new, :edit]
before_action :delete_by_token, only: [:edit]
before_action :set_sizes, only: [:create, :update]
before_action :set_array, only: [:index, :show]
before_action :check_endereco, only: [:new]
after_action :update_tag, only: [:create, :update]
skip_before_filter :authenticate_user!, only: [:index, :show, :reset_filterrific, :frete]
add_breadcrumb "Home", :root_path
def index
if session
session[:filterrific_base_products] = nil
end
@filterrific = Filterrific.new(
BaseProduct,
params[:filterrific] || session[:filterrific_base_products]
)
if params[:category_id]
@filterrific.with_category = params[:category_id]
@category = Category.find(params[:category_id])
end
if params[:album_id]
@filterrific.with_album = params[:album_id]
@album = Album.find(params[:album_id])
end
@base_products = BaseProduct.filterrific_find(@filterrific).paginate(:page => params[:page], :per_page => 20).sorted_by('created_at_desc')
session[:filterrific_base_products] = @filterrific.to_hash
if @category
add_breadcrumb "#{@category.root.name} > #{@category.name}", "/categories/#{@category.id}/base_products"
category = @category.root.name.downcase.split.delete_if{|x| @array.include?(x)}.join(',')
subcategory = @category.name.downcase.split.delete_if{|x| @array.include?(x)}.join(',')
set_meta_tags(
title: "#{@category.name} | LiquidaKids",
description: "No LiquidaKids você encontra: #{@category.root.name} - #{@category.name}.",
keywords: "#{category},#{subcategory},liquidakids"
)
elsif @album
add_breadcrumb "#{@album.store.name}", store_path(@album.store)
add_breadcrumb "#{@album.title}", "/albuns/#{@album.id}/base_products"
else
add_breadcrumb "Produtos", base_products_path unless @category || @album
set_meta_tags(
title: 'Produtos | LiquidaKids',
description: 'Grande variedade de produtos infantil, novos e de desapegos.',
keywords: "conjunto,vestido,body,camiseta,blusa,calça,melissa,sapatilha,
pelúcia,casaco,bota,sandália,tênis,andadores,berços,fantasias,saia,shorts,
macacões,carter's,gymboree,gap,maiô,liquidakids"
)
end
respond_to do |format|
format.html
format.js
end
end
def reset_filterrific
session[:filterrific_base_products] = nil
redirect_to :back
end
def show
@base_product = BaseProduct.find(params[:id])
@category = Category.find(@base_product.category_id)
@photos = @base_product.photos.all
@store = @base_product.user.store
@email_form = EmailForm.new
@related = BaseProduct.where(:category => @base_product.category).order('random()').limit(12)
@related = @related.where.not(id: @base_product)
add_breadcrumb "#{@base_product.user.store.name.downcase}", store_path(@base_product.user.store)
if @base_product.album
add_breadcrumb "#{@base_product.album.title.downcase}", album_base_products_path(@base_product.album)
end
add_breadcrumb "#{@base_product.title.downcase}", base_product_path(@base_product)
title = @base_product.title.downcase.split.delete_if{|x| @array.include?(x)}.join(',')
set_meta_tags(
site: 'LiquidaKids',
title: "#{@base_product.title}", reverse: true,
description: "#{@base_product.description}",
keywords: "#{title},liquidakids",
# Just don't call html_safe here...
og: {
title: "#{@base_product.title} | LiquidaKids",
type: "og:base_product",
image: @base_product.photos.any? ? "#{@base_product.photos.first.image_url(:thumb)}" : "",
:'image:width' => 217,
:'image:height' => 217,
description: "#{@base_product.description}",
url: request.original_url
}
)
end
def new
@base_product = BaseProduct.new
@base_product.token = @base_product.generate_token
@photos = []
add_breadcrumb "Anunciar", :new_base_product_path
end
def edit
add_breadcrumb "#{@base_product.user.store.name.downcase}", store_path(@base_product.user.store)
if @base_product.album
add_breadcrumb "#{@base_product.album.title.downcase}", album_base_products_path(@base_product.album)
end
add_breadcrumb "#{@base_product.title.downcase}", base_product_path(@base_product)
add_breadcrumb "editar", :edit_base_product_path
end
def create
@base_product = BaseProduct.new(base_product_params)
@base_product.user_id = current_user.id
@photos = Photo.where(:base_product_token => @base_product.token)
@base_product.photos << @photos
respond_to do |format|
if @base_product.save
add_photos unless params[:image].nil?
format.html { redirect_to @base_product, notice: 'Produto criado com sucesso.' }
else
format.html { render action: 'new' }
end
end
end
def update
@photos = Photo.where(base_product_id: nil).where(base_product_token: @base_product.token)
@base_product.photos << @photos
respond_to do |format|
if params[:photo_ids]
remove_photos
end
if @base_product.update(base_product_params)
format.html { redirect_to for_sale_path(@base_product.store), notice: 'Produto atualizado com sucesso.' }
format.json { render :show, status: :ok, location: @base_product }
else
format.html { render :edit }
format.json { render json: @base_product.errors, status: :unprocessable_entity }
end
end
end
def destroy
@base_product.destroy
respond_to do |format|
format.html { redirect_to :back, notice: 'Produto deletado com sucesso.' }
format.json { head :no_content }
end
end
def create_follow
followed = BaseProduct.find(params[:follow][:followed_id])
follower = current_user
respond_to do |format|
if follower.follow(followed)
format.html { redirect_to :back, notice: 'Produto adicionado na sua lista de favoritos.' }
format.json { render :back, status: :ok }
else
format.html { redirect_to :back, notice: 'Falha na comunicação, tente novamente.' }
format.json { render :back, status: :unprocessable_entity }
end
end
end
def delete_follow
followed = BaseProduct.find(params[:unfollow][:followed_id])
follower = current_user
respond_to do |format|
if follower.stop_following(followed)
format.html { redirect_to :back, notice: 'Produto removido da sua lista de favoritos.' }
format.json { render :back, status: :ok }
else
format.html { redirect_to :back, notice: 'Falha na comunicação, tente novamente.' }
format.json { render :back, status: :unprocessable_entity }
end
end
end
def delete_by_token
photos = Photo.where("base_product_token = ? AND base_product_id IS ?", @base_product.token, nil)
if photos.any?
photos.each do |p|
p.destroy
end
end
end
def frete
@base_product = BaseProduct.find(params[:id])
comprimento = @base_product.length < 16 ? 16 : @base_product.length
largura = @base_product.width < 18 ? 18 : @base_product.width
altura = @base_product.height < 9 ? 9 : @base_product.height
frete = Correios::Frete::Calculador.new :cep_origem => @base_product.endereco.cep,
:cep_destino => params[:frete][:cep_destino],
:peso => @base_product.weight,
:comprimento => comprimento,
:largura => largura,
:altura => altura
@servicos = frete.calcular :sedex, :pac
respond_to do |format|
format.json { render :show, status: :created, location: @servicos }
format.js { render :show, status: :created, location: @servicos }
end
end
private
def update_tag
photos = Photo.where(:base_product_token => @base_product.token)
if photos.any?
photos.each do |p|
my_public_id = p.image.file.public_id
Cloudinary::Api.update(my_public_id, :tags => "product_photo")
end
end
end
# Use callbacks to share common setup or constraints between actions.
def set_base_product
@base_product = BaseProduct.find(params[:id])
@parent = Category.find(@base_product.category_id).parent
end
def set_categories
@ancestors = Category.roots
@descendants = Category.select_descendants
end
def set_maker
@makers = Category.select_makers
end
def set_sizes
if params[:base_product][:sizes].size > 1
params[:base_product][:sizes].delete("")
end
end
def set_albuns
@album = Album.new
@albuns = current_user.store.albuns
end
def set_array
@array = ["","o","a","para","de","-","3","e"]
end
def check_endereco
if current_user.endereco.cep.blank? || current_user.endereco.estado_id.nil?
flash[:notice] = 'Antes anúnciar, por favor, atualize os dados abaixo...'
redirect_to edit_endereco_path(current_user.endereco)
end
end
# Never trust parameters from the scary internet, only allow the white list through.
def base_product_params
params.require(:base_product).permit(:title, :description, :gender, :hide_price, :cover,
:recommended, :search_list,
:status, :price, :user_id, :tipo, :category_id, :maker_id, :album_id, :situation, :token,
:width, :height, :length, :weight, sizes: [],
photos_attributes: [:id, :image, :_destroy])
end
end
Fez o teste via Ruby?
Fiz via curl -i http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx. Será que é melhor fazer via Ruby? Quem gem tenho que instalar?
Usa o Rails console da sua aplicação no servidor.
Retornou ok... Net::HTTPOK 200 OK readbody=true
Agora pelo Rails console, faça um cálculo de frete qualquer usando a gem correios-frete.
Hey, @lymecca, acredito que isso não seja um problema dessa gem. Poderia fechar a issue por favor?
Olá, será que alguém consegue me ajudar, estava tudo funcionando de repente parou! Na máquina local funciona mas no servidor(máquina virtual na maxihost) não. Dá a seguinte msg de erro...
Net::OpenTimeout (execution expired): app/controllers/base_products_controller.rb:221:in `frete'