Я использовал Sidekiq
для обработки асинхронных писем. Он хорошо работает в разработке, однако он не отображает действительный URL-адрес актива в опубликованной электронной почте.Ruby On Rails: Mailer: Sidekiq - путь к ресурсу недействителен по электронной почте: Engineyard: Nginx: Пассажир
Ожидаемый URL Asset:
http://myapp.com/assets/logo-277121cb27cd5798ea5786fa2996c82f.png
Got:
http://myapp.com/images/logo.png
Я использую Engineyard
как VPC. На рабочих/промежуточных серверах у меня есть специальный экземпляр утилиты с именем redis
, который содержит redis server
и sidekiq
экземпляров. Они правильно обрабатывают электронную почту, поэтому я думаю, что они в хорошем состоянии.
конфигурации Nginx в /data/nginx/servers/my_app.conf
cat /data/nginx/servers/my_app.conf
server {
listen 81;
server_name _;
client_max_body_size 100M;
root /data/my_app/current/public;
access_log /var/log/engineyard/nginx/my_app.access.log main;
error_log /var/log/engineyard/nginx/my_app.error.log notice;
location ~ ^/(images|assets|javascripts|stylesheets)/ {
expires 10y;
try_files $uri $uri/index.html /last_assets/$uri /last_assets/$uri.html @app_my_app;
}
error_page 404 /404.html;
error_page 500 502 504 /500.html;
error_page 503 @503;
recursive_error_pages on;
location @503 {
error_page 405 = /system/maintenance.html;
if (-f $request_filename) {
break;
}
rewrite ^(.*)$ /system/maintenance.html break;
}
location @app_my_app {
passenger_enabled on;
passenger_set_cgi_param HTTP_X_FORWARDED_FOR $proxy_add_x_forwarded_for;
passenger_set_cgi_param HTTP_X_REAL_IP $remote_addr;
passenger_set_cgi_param HTTP_HOST $http_host;
passenger_set_cgi_param HTTP_X_FORWARDED_PROTO $scheme;
passenger_set_cgi_param HTTP_X_REQUEST_START 't=$start_time';
passenger_set_cgi_param HTTP_X_QUEUE_START 't=$start_time';
passenger_set_cgi_param SERVER_PORT 80;
rack_env staging;
passenger_min_instances 2;
}
location/{
if (-f $document_root/system/maintenance.html) { return 503; }
try_files $uri $uri/index.html $uri.html @app_my_app;
}
include /etc/nginx/servers/my_app/custom.conf;
}
и я использовал вспомогательный метод, чтобы получить URL логотипа Организации
# Gets the logo URL of the Organization set by Controller/Mailer
# in instance variable @organization
# @param [Organization] organization default value is nil
# @return [String] URL for logo image
def get_logo_url(organization = nil)
if organization && organization.logo.present?
# This case works as AWS S3 is used
organization.logo_url(:logo)
else
# This case not working
asset_url('logo.png')
end
end
Последнее Поиск:
Я попытался отправить по электронной почте от основное приложение без использования sidekiq
и оно работает в этом случае , Помощники по активам, такие как asset_url
, asset_path
, image_path
, не могут получить имя файла diegsted из файла манифеста.
Какой прокси-сервер Http вы используете? Nginx, Apache? –
@MrH Я использую веб-сервер 'Nginx' и' phusionpassenger' в качестве сервера приложений – illusionist
Получение этой же проблемы с помощью Passenger на Heroku –