то, что происходит с моим приложением rails, очень и очень странно.
Чтобы загрузить картинку, принадлежащую онлайн-статье в моем приложении, я решил использовать carrierwave. Все изображения находятся в удаленном URL-адресе, и для получения изображения и сохранения его на сервере я использую рабочий рельсов
ВЫПУСК
Когда приложение сохраняет новый фид каждый статья (фидлист), принадлежащий этому фиду, сохраняется в postgresql дБ с помощью этого работника (фиды has_many Фидлисты):
class AddNewFeedWorker
include Sidekiq::Worker
sidekiq_options :queue => :default
sidekiq_options :retry => false #when fail don't repeat
.
.
.
def perform(feed_id)
feed.entries.each do |entry|
entry.published.nil? ? @datafeedlist == Time.now() : @datafeedlist = entry.published
unless Feedlist.where(:guid => entry.id).exists?
begin
@object = LinkThumbnailer.generate(entry.url)
@img_url = @object.images.last.to_s
rescue Exception => exc
logger.error("Message for the log file: #{exc.message} for the feed id: #{@feed.id}")
@img_url = entry.image
end
sleep 1
@f = Feedlist.create!(
:rssurl => @feed.rssurl,
:name => entry.title,
:summary => entry.summary,
:url => entry.url,
:published_at => @datafeedlist,
:guid => entry.id,
:image => entry.media_thumbnail_url,
:remote_article_picture_url => @img_url,
:content => entry.content,
:feed_id => @feed.id,
:user_id => @user.id
)
end
end
.
.
.
end # end perform method
end # end worker
this line : remote_article_picture_url => @ img_url - это запись несущей, которая извлекает из удаленного местоположения URL-адрес изображения и сохраняет его на вашем сервере.
Я сказал capistrano to сохранять все изображения в общем каталоге для всех выпусков
my_rails_capistrano_directory / shared / uploads
НО приложение, вместо того чтобы сохранять в этом каталоге изображения, создает новый каталог и сохраните все картинки
my_rails_capistrano_directory / Releases / 20200327071103 / uploads
, но мое текущее приложение находится в каталоге текущей версии
my_rails_capistrano_dir ectory / release / 20200429020251
МОЙ ВОПРОС - ПОЧЕМУ ЭТО ПРОИСХОДИТ?
Для получения дополнительной информации вы можете проверить следующий код
CAPISTRANO
config / initializers / carrierwave.rb
CarrierWave.configure do |config|
config.permissions = 0600
config.directory_permissions = 0700
config.storage = :file
config.root = Rails.root
end
config / deploy.rb
append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "vendor/bundle", "uploads"
UPLOADER (я хочу загрузить в локальной машине. Каталог uploads находится внутри приложения root, но вне / publi c dir)
class CategoryLogoUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :middle do
process resize_to_fit: [400, 300]
end
version :thumb do
process resize_to_fit: [120, 120]
end
end
MODEL
class Feedlist < ActiveRecord::Base
mount_uploader :article_picture, CategoryLogoUploader
end
ПРОСМОТР этот код добавляет новый фид, принадлежащий пользователю
<%= form_for([@feed.user, @feed]) do |f| %>
<% if @feed.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@feed.errors.count, "error") %> prohibited this feed from being saved:</h2>
<ul>
<% @feed.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="form-group">
<%= I18n.t("feed.title") %> <br />
<%= f.text_field :title %>
</div> <br />
<div class="form-group">
<%= I18n.t("feed.insert") %><br />
<%= f.text_field :rssurl, required: true %>
</div> <br />
<div class="form-group">
<%= f.hidden_field :user_id, :value => current_user.id %>
</div>
<div class="form-group">
<%= I18n.t("feed.tags_list") %><br />
<%= f.text_field :tag_list, required: true %>
</div>
<div class="form-group">
<%= f.submit @feed.new_record? ? "#{I18n.t("feed.insert_button")}" : "#{I18n.t("feed.update_button")}", class: "btn btn-info btn-rounded"%>
</div>
<% end %>
CONTROLLER
def create
@feed
if @feed.save
AddNewFeedWorker.perform_async(@feed.id)
redirect_to root_path
else
render 'new', :notice => "something went wrong"
end
end