我需要将我的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)
答案 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__
编辑:由于文件路径中有空格,请尝试以下操作:
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
或类似的东西,而是引用该文件路径。