Как создать ссылки на статические изображения?

71
9

Я понял, что когда я отправляю письма (письма) на сайт localhost через локальный постфикс-сервер, они отправляются успешно, но каждый раз мне нужно включить ссылку на письмо на мой логотип, хранящийся в:

общественности /castle.jpg

app/mailers/review_mailer.rb:

class ReviewMailer < ApplicationMailer
default from: 'no-reply@kalinin.ru'

def welcome_email(review)
@review = review
mail(to: 'bla@bla.ru', subject: 'New review create')
end
end

views/review_mailer/welcome_email.html.erb:

<!DOCTYPE html>
<html>
...........................
<p>logo: <%= image_tag 'public/castle.jpg' %></p>
</body>
</html>

application.rb:

config.action_mailer.default_url_options = { host: 'localhost' }

development.rb:

  config.action_mailer.raise_delivery_errors = false
config.action_mailer.delivery_method = :sendmail
config.action_mailer.default_url_options = { :host => 'localhost:3000' }

reviews_controller:

  def create
@review = current_user.reviews.build(review_params)
if @review.save
ReviewMailer.welcome_email(@review).deliver_now
redirect_to root_path
end

после создания нового обзора, вот консольный вывод:

ReviewMailer#welcome_email: processed outbound mail in 205.9ms

Sent mail to bla@bla.ru (73.5ms)
Date: Tue, 22 Sep 2015 12:47:11 +0300
From: no-reply@kalinin.ru
To: prozaik81-2@yandex.ru
Message-ID: <5601239fdd0d3_18b43f823a7394382836b@kalinin.mail>
Subject: New review create
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--==_mimepart_5601239fdbc22_18b43f823a73943828272";
charset=UTF-8
Content-Transfer-Encoding: 7bit

----==_mimepart_5601239fdbc22_18b43f823a73943828272
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit

<html>
<body>
<!DOCTYPE html>
<html>
....................
<p>logo: <img src="/images/public/castle.jpg" alt="Castle" /></p>
</body>
</html>
</body>
</html>

----==_mimepart_5601239fdbc22_18b43f823a73943828272--

Redirected to http://localhost:3000/
Completed 302 Found in 601ms (ActiveRecord: 301.4ms)

Почта (письмо) не отправляется, что может быть неправильным?

спросил(а) 2015-09-22T13:06:00+03:00 5 лет, 1 месяц назад
1
Решение
58

Вам не нужно ссылаться на public на своих путях. Вы должны иметь возможность ссылаться на castle.jpg напрямую...

<%= image_tag 'castle.jpg' %>

Вы должны помнить, что приложение Rails запускается из public каталога. В самом деле, если вы настроили сервер nginx, он фактически рекомендует указывать на public:

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

server_name mydomain.com;
passenger_enabled on;
rails_env production;
root /home/deploy/myapp/current/public;

Таким образом, если вы ссылаетесь на public, вы получаете вид типа "начального" типа, когда приложение пытается ссылаться на себя.

-

В отношении хоста ресурсов для почтовой рассылки могут помочь другие ответы. У меня нет опыта в этой области.

ответил(а) 2015-09-22T13:23:00+03:00 5 лет, 1 месяц назад
58

Я думаю, вы должны написать это в своем файле среды:

config.action_mailer.asset_host = "http://localhost:3000"

или


config.asset_host = 'http://localhost:3000'

Это будет подразумевать следующие конфигурации:

config.action_controller.asset_host = 'http://localhost:3000'
config.action_mailer.asset_host = 'http://localhost:3000'

ответил(а) 2015-09-22T13:13:00+03:00 5 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема