Ответ 1
Самый чистый способ сделать это, установив параметр корневой почты CarrierWave
CarrierWave.configure do |config|
config.root = Rails.root
end
тогда store_dir
будет использоваться внутри этого корня.
Carrierwave по умолчанию принимает URL-адрес, сгенерированный store_dir
в загрузчике, и добавляет путь к общей папке приложения rails и сохраняет файлы.
Например, если
def store_dir
"uploads/#{model.id}"
end
то файл сохраняется в public/uploads/:attachment_id
Если вы пытаетесь переместить сохраненные файлы из общей папки, они сохраняются в общей папке. Кто-нибудь имеет представление о том, как хранить файлы за пределами общей папки?
Самый чистый способ сделать это, установив параметр корневой почты CarrierWave
CarrierWave.configure do |config|
config.root = Rails.root
end
тогда store_dir
будет использоваться внутри этого корня.
Я понимаю, что это не настоящий вопрос, но я наткнулся на него, ища что-то еще. Ответ заключается в простое использование Rails.root, например:
def store_dir
"#{Rails.root}/private/files/#{model.id}"
end
Гораздо более чистым решением было бы определить:
def store_dir
nil
end
Смотрите документы
Внутри магазина dir вы также можете сделать что-то вроде этого:
def store_dir
"#{Rails.root.join('public', 'system', 'uploads')}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
решение смены config_root не сработало для меня.
Если кому-то это нужно только для RSpec, просто сделайте
describe SomeClass do
before do
CarrierWave.stub(:root).
and_return(Pathname.new "#{Rails.root}/tmp/fake_public")
end
it { ... }
end
если вы хотите, чтобы для всех ваших тестов
# spec/spec_helper.rb
RSpec.configure do |config|
# ...
config.before :each do
# ...
CarrierWave.stub(:root).and_return(Pathname.new "#{Rails.root}/tmp/public")
end
end