【问题标题】:Heroku rake task file path errorHeroku rake 任务文件路径错误
【发布时间】:2013-09-30 18:05:15
【问题描述】:

我有一些数据需要用于生产我的 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)

【问题讨论】:

    标签: ruby-on-rails csv heroku


    【解决方案1】:

    不要输入文件的当前路径(看起来是 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
    

    然后我会将其输入到我的种子.rb 文件中

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

    【讨论】:

    • 我使用了 File.expand_path,它给了我绝对路径,它和我已经写的一样,所以我仍然得到同样的错误
    • 我添加了shellwords并使用了shellescape方法,我仍然得到同样的错误
    • 那么我想说你又回到了第一条:File.expand_path 输出的路径上没有文件。
    • 是的,这很奇怪,在终端中,我转到了保存 csv 文件的文件夹并做了一个密码以确保我有一个确切的文件路径到该位置,然后我将它用于File.expand_path,它给出了相同的输出,但由于某种原因 Heroku 看不到它
    • 这就是我所做的a = File.expand_path("/Users/username/Documents/Apps Folder/myapp/app/assets/files/seed_file.txt", __FILE__).shellescapeCSV.foreach(a) do |row|
    【解决方案2】:

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

    改用CSV.foreach("./seed_file.txt")

    【讨论】:

    • 即使将种子文件移动到应用程序后,仍然出现相同的错误
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 1970-01-01
      • 2016-07-23
      • 2015-02-20
      • 2011-05-24
      • 1970-01-01
      • 2011-12-03
      相关资源
      最近更新 更多