2012-12-13 2 views
1

je dois aller à l'adresse suivante: http://autospace.by/download/prices.zipGet zip from url web automatiquement et décompressez-

Et dézipper ce fichier à mon application rails, mais je dois le faire sur chaque 14h00 tous les jours, la difficulté principale est-ce que sur le fichier de l'autre URL dans l'archive est le changement de nom tous les jours, donc je dois décompresser le fichier, dont le nom se termine et faire quelques manipulations avec elle?

mon code maintenant:

require 'net/http' 
    Net::HTTP.start("autospace.by") do |http| 
     resp = http.get("/download/prices.zip") 
     open(Rails.root.join('public', 'uploads_prices', "autospace.zip"), "wb") do |file| 
      file.write(resp.body) 
     end 
    end 

Alors: comment puis-je décompressez le fichier sur cette URL, et envoyer ce nom de fichier comme à la méthode param MyMethod (nom de fichier)? Et aussi donner des conseils comment faire cela tous les jours automatiquement?

Répondre

2

vous pouvez directement utiliser la commande zip linux system "cd #{Rails.root}/#{zip_path}; zip -qr #{zip_file_name}.zip #{zip_file_name};

ou utiliser les pierres précieuses rubis zip

gem 'archive-zip' # Use require_gem for rubygems versions older than 0.9.0. 
    require 'archive/zip' 

    # Add a_directory and its contents to example1.zip. 
    Archive::Zip.archive('example1.zip', 'a_directory') 

si vous voulez excute chaque jour, il suffit d'exécuter ce script dans crontab, par exemple

`*/5 * * * * /usr/local/bin/ruby /local/myuser/rubyscript/ftpscript.rb >> /local/myuser/rubyscript/ftplog.txt` 
+0

gem 'archive-zip' écrivez ceci en fonction de mon code, comment le joindre? – byCoder

+0

exécutez 'gem" archive-zip "à votre teminate, et ajoutez' require 'archive/zip'' dans vos scripts –

+0

comment puis-je obtenir le nom du fichier? si il pourrait être 13-12name, 14-12name etc ... je dois l'envoyer; s nom à la méthode – byCoder