Heroku rake任务文件路径错误

时间:2013-09-30 18:05:16

标签: ruby-on-rails csv heroku

我需要将我的heroku应用程序用于生产的数据。当我运行heroku run rake db:seed命令时出现错误,“rake aborted!目录中没有这样的文件”

我尝试过创建自定义rake任务,但我得到了同样的错误。

我的rake任务的开头如下:

require 'csv'
CSV.foreach("/Users/username/Documents/Apps Folder/myapp/seed_file.txt") do |row|
   ...
end

我不确定我的问题是否存在我的CSV文件,或者是否是其他问题,我已经查看了有关stackoverflow的其他相关问题,但他们无法解决我的问题。有谁知道如何解决这个问题?

编辑:当我尝试在下面运行自定义rake任务时,我添加了在终端中收到的错误消息:

Running `rake customraketask` attached to terminal... up, run.8243
rake aborted!
No such file or directory -/Users/username/Documents/Apps Folder/myapp/app/assets/files/seed_file.txt
/app/lib/tasks/customraketask.rake:13:in `block in <top (required)>'
Tasks: TOP => customraketask
(See full trace by running task with --trace)

3 个答案:

答案 0 :(得分:2)

不要输入文件的当前路径(看起来是OSX的文件目录结构,而是尝试执行类似

的操作

File.expand_path("../../seed_file.txt", __FILE__)

这将为您提供相对于当前文件的路径,与../../seed_file.txt路径连接并处理后将返回实际的absolute path。如果您的文件位于db/seeds.rb,则可能会看到以下内容:/home/username/Apps Folder/my_app/seed_file.txt

有关__FILE__

的详情,请参阅this previous question

编辑:由于文件路径中有空格,请尝试以下操作:

require 'shellwords'
File.expand_path("../seed_file.txt", __FILE__).shellescape

编辑#2 :我认为你误解了我的答案。我将在这里使用不同的方法重新解释它。

因此,如果我的文件目录如下所示:

├───App
|   └───db
|       ├───seeds.rb
|   ├───seed_file.txt

然后我将其输入我的seeds.rb文件

# seeds.rb
CSV.foreach( File.join(File.dirname(__FILE__), '../seed_file.txt') ) do |row|
    puts row
end

答案 1 :(得分:0)

如果您仔细阅读错误消息,您会发现Heroku没有您的/Users/username ...目录。

请尝试CSV.foreach("./seed_file.txt")

答案 2 :(得分:0)

从您的文件路径判断,看起来您正在尝试从位于本地系统上的文件中播种,而不是在Heroku上播种。 rails应用程序的db文件夹中应该有一个seeds.rb文件,您可以在其中配置数据库种子。尝试将seed_file.txt添加到rails项目文件夹,可能是app > assets > files > seed_file.txt或类似的东西,而是引用该文件路径。