Wysyłanie plików za pomocą CarrierWave, Rails 3
Próbuję zalać bazę danych w Rails 3 obrazami używając CarrierWave, jednak nic, co próbuję, nie działa bez konieczności ręcznego przesyłania ich wszystkich.
pi = ProductImage.new(:product => product)
pi.image = File.open(File.join(Rails.root, 'test.jpg'))
pi.store_image! # tried with and without this
product.product_images << pi
product.save!
Czy ktoś wie jak w ogóle siewu używać CarrierWave? 6 answers
Okazuje się, że dokumentacja dla CarrierWave jest nieco błędna. Istnieje bardziej aktualny fragment kodu w README w repozytorium GitHub dla projektu .
W skrócie:
pi = ProductImage.create!(:product => product)
pi.image.store!(File.open(File.join(Rails.root, 'test.jpg')))
product.product_images << pi
product.save!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 03:58:07
Tak długo, jak Twój uploader jest zamontowany do twojego modelu, używając metody mount_uploader, możesz zasiać swoje modele za pomocą carrierwave przy użyciu odpowiedniej metody otwartej. Byłby to bardziej zwięzły sposób osiągnięcia tego samego. W moim przypadku wysyłam z adresu URL:
Game.create([
{
:title => "Title",
:uuid_old => "1e5e5822-28a1-11e0-91fa-0800200c9a66",
:link_href => "link_href",
:icon => open("http://feed.namespace.com/icon/lcgol.png"),
:updated_at => "2011-01-25 16:38:46",
:platforms => Platform.where("name = 'iPhone'"),
:summary => "Blah, blah, blah...",
:feed_position => 0,
:languages => Language.where("code = 'de'"),
:tags => Tag.where(:name => ['LCGOL', 'TR', 'action'])
},
{...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-15 12:37:54
Oto przykładowy skrypt, który włączyłem do zalążka.plik rb dla jednego z moich projektów. Jestem pewien, że można to poprawić, ale zapewnia dobry przykład pracy.
Wszystkie zasoby, które wyciągam, są przechowywane w aplikacji / zasobach / obrazach i mają nazwy pasujące do nazw moich obiektów Info(po zastąpieniu spacji podkreślnikami i zmniejszeniu nazw).
Tak to brzmi nieefektywnie, ale oprócz umieszczania tych aktywów na FTP gdzieś tam, jest to najlepsze rozwiązanie, jakie znalazłem dla mojego zdalny serwer, aby móc przesyłać pliki bezpośrednio do S3 za pomocą Carrierwave i Fog.
Mój Model Info ma skojarzenie has_one
z modelką z galerii, która ma skojarzenie has_many
z modelką ze zdjęciem. Carrierwave uploader jest zamontowany na kolumnie' file' (string) tego modelu.
Info.all.each do |info|
info_name = info.name.downcase.gsub(' ', '_')
directory = File.join(Rails.root, "app/assets/images/infos/stock/#{info_name}")
# making sure the directory for this service exists
if File.directory?(directory)
gallery = info.create_gallery
Dir.foreach(directory) do |item|
next if item == '.' or item == '..'
# do work on real items
image = Photo.create!(gallery_id: gallery.id)
image.file.store!(File.open(File.join(directory, item)))
gallery.photos << image
end
info.save!
end
end
To działa dla mnie bezbłędnie, ale idealnie nie musiałbym pakować plików, które przesyłam do S3 w folderze assets. Jestem bardziej niż otwarty na sugestie i ulepszenia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-14 20:12:35
Wszystko jest w dokumentacji: https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-%22Upload%22-from-a-local-file
restaurant = Restaurant.create!(name: "McDonald's")
restaurant.logo = Rails.root.join("db/images/mcdonalds_logo.png").open
restaurant.save!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-11 14:50:42
Bazując na komentarzu Josepha jabera, to dla mnie zadziałało:
Poniższy kod powinien być w seeds.rb
20.times do
User.create!(
name: "John Smith",
email: "[email protected]",
remote_avatar_url: (Faker::Avatar.image)
)
end
To stworzy 20 użytkowników i da każdemu inny obraz awatara.
Użyłem klejnotu fakera do wygenerowania danych, ale wszystko {[2] } Zwraca standardowy adres url, więc możesz użyć dowolnego wybranego adresu url.
Powyższy przykład zakłada, że atrybut User models, w którym przechowujesz obrazy, nazywa się avatar
Jeśli atrybut został wywołany obrazek napisałbyś tak:
remote_image_url: (Faker::Avatar.image)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-30 11:03:26
Najprostszym rozwiązaniem było dla mnie:
- komentarz-wypisz linię mount_uploader w modelu
- Seed danych
- odkomentuj linię w modelu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-12 02:59:36