gpt4 book ai didi

ruby-on-rails - 下载 Rails Assets - 开发与生产中的文件路径

转载 作者:太空宇宙 更新时间:2023-11-03 16:04:08 25 4
gpt4 key购买 nike

我有一个 downloads_controller.rb用一个download我想触发下载位于名为 downloads 的文件夹中的文件的操作它位于名为 download_assets 的文件夹中我已将其添加到我的 Assets 路径中。

- download_assets [Added to asset paths]
- downloads
- file_1.pdf
- file_2.pdf
...

我可以使用以下方法成功访问文件夹中的任何文件:

<罢工> http://my-app.dev/assets/downloads/file.pdf

为了使用 send_file,我需要这个文件的文件系统路径而不是 URL。我可以使用 Rails.root 获取我的 Rails 项目根目录的路径,以及使用 asset_path(path) 的文件路径.但是,问题是因为我在开发中,所以这个路径没有文件。该文件存储在:

path/to/rails/project/app/assets/download_assets/downloads/file.pdf

Action :

   def download
@download = Download.find(params[:id])
file_path = "downloads/#{@download.filename}.pdf"
file_path = "#{Rails.root}#{ActionController::Base.helpers.asset_path(file_path)}"
send_file(file_path, :type=>"application/pdf", x_sendfile: true)
end

为了让它在开发中工作,我需要使用以下内容:

"#{Rails.root}/app/assets/download_assets/#{file_path}"

然而,这在生产中会失败,因为 Assets 将被预编译并移至 assets .

我目前的解决方法是:

   file_path = "downloads/#{@download.filename}.pdf"
if Rails.env == "development" || Rails.env == "test"
file_path = "#{Rails.root}/app/assets/download_assets/#{file_path}"
else
file_path = "#{Rails.root}{ActionController::Base.helpers.asset_path(file_path)}"
end

是否有其他方法可以根据环境提供不同的路径,因为这看起来很脆弱?

最佳答案

是的。

/config/initializers 中创建一个名为 say "config.yml"的文件,设置如下:

config.yml:

---
## NOT a tab character. 3 spaces. (In case that affects you)
development:
path_to_uploads: /path/to/downloads/for/development

production:
path_to_uploads: /path/to/downloads/for/production

test:
path_to_uploads: /path/to/downloads/for/test

然后在同一目录 (/config/initializers/) 中创建一个文件,名为 config.rb

配置.rb:

APP_CONFIG = YAML.load_file("#{Rails.root}/config/initializers/config.yml")

跳转到你的 Controller :

foo_controller.rb:

      class FooController < ApplicationController
def download
# ...
path_to_uploads = Rails.root.to_s + APP_CONFIG["#{Rails.env}"]['path_to_uploads']
## By handing it the Rails.env object, it will return the current environment and handle selecting the correct environment for you.
end
end

有一篇关于使用 YAML 查找环境的优秀 RailsCast here.

希望对您有所帮助!


关于ruby-on-rails - 下载 Rails Assets - 开发与生产中的文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18124673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com