1

我有数据需要为我的 heroku 应用程序播种以进行生产。当我运行 heroku run rake db:seed 命令时出现错误,“rake aborted! no such file in directory”

我试过创建一个自定义 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)
4

3 回答 3

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__

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

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
于 2013-09-30T18:15:57.273 回答
0

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

于 2013-09-30T18:18:06.217 回答
0

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

试试CSV.foreach("./seed_file.txt")吧。

于 2013-09-30T18:15:01.293 回答