2013-09-30 78 views
1

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

我试过创建一个自定义rake任务,并且出现同样的错误。

我rake任务的开始是如下:

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

不知道如果我的问题是,我有我的CSV文件的位置,或者如果它是别的东西,我一直在等相关的问题上显得stackoverflow和他们一直无法解决我的问题。有谁知道如何解决这个问题?

编辑:我已经加我收到终端的错误消息当我尝试运行下面我自定义的耙子任务:

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) 

回答

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

this previous question,了解更多有关__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 
+0

我使用了File.expand_path,它给了我绝对路径,它与我已经写过的相同,所以我仍然得到相同的错误 – Reuben

+0

Paste整个错误到你的问题。 – Momer

+0

我粘贴了上面的错误消息 – Reuben

0

如果你仔细阅读错误消息,你会意识到Heroku的不有你的/Users/username ...目录。

尝试使用CSV.foreach("./seed_file.txt")

+0

即使在将种子文件移动到应用程序中后,仍然得到相同的错误 – Reuben

0

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