Ruby on rails Carrierwave+;雾+;S3和x2B;Rails无法在数据库中保存完整URL
我正在尝试将carrierwave上传的图像的完整url保存在我的数据库中,而不仅仅是标识符。在保存之前,我有可用的图像URL,但是在保存时,数据库中只显示标识符。我在Carrierwave.rb配置中设置了主机和端点,以及asset_主机。见下文:Ruby on rails Carrierwave+;雾+;S3和x2B;Rails无法在数据库中保存完整URL,ruby-on-rails,amazon-s3,carrierwave,fog,Ruby On Rails,Amazon S3,Carrierwave,Fog,我正在尝试将carrierwave上传的图像的完整url保存在我的数据库中,而不仅仅是标识符。在保存之前,我有可用的图像URL,但是在保存时,数据库中只显示标识符。我在Carrierwave.rb配置中设置了主机和端点,以及asset_主机。见下文: CarrierWave.configure do |config| config.fog_provider = 'fog/aws' # required config.fog_credentia
CarrierWave.configure do |config|
config.fog_provider = 'fog/aws' # required
config.fog_credentials = {
provider: 'AWS', # required
aws_access_key_id: 'xxx', # required
aws_secret_access_key: 'yyy', # required
region: 'eu-west-1', # optional, defaults to 'us-east-1'
host: 's3.example.com', # optional, defaults to nil
endpoint: 'https://s3.example.com:8080' # optional, defaults to nil
}
config.fog_directory = 'name_of_directory' # required
config.fog_public = true # optional, defaults to true
config.asset_host = "https://s3.example.com:8080/name_of_directory"
end
在这种情况下,asset_主机似乎没有做多少工作。是否有其他方法确保保存完整的url
谢谢大家! 存储所有完整URL可能会导致大量重复(因为所有URL的主机都是相同的)。因此,这里的方法只是存储不同的部分,并根据已知的主机和存储的标识符构建URL。因此,当您加载文件时,您应该能够使用carrierwave接口很容易地找到url(如果提供,它应该尊重asset_主机)
您需要在此处存储完整URL有什么特殊原因吗?存储所有完整URL可能会导致大量重复(因为所有URL的主机都是相同的)。因此,这里的方法只是存储不同的部分,并根据已知的主机和存储的标识符构建URL。因此,当您加载文件时,您应该能够使用carrierwave接口很容易地找到url(如果提供,它应该尊重asset_主机)
您需要它在此处存储完整URL有什么特殊原因吗?非常感谢您提供的信息。虽然我理解功能背后的原因,但从数据库的角度来看,我不想依赖Carrierwave进行所有交互,并保持将来使用其他解决方案以及直接与数据库交互或根据需要导入/导出数据的灵活性和自由度。你有解决这个问题的办法吗?非常感谢你。我对这里的细节不太熟悉(与carrierwaves更广泛的问题相比,我更熟悉fog本身)。我认为您可能会这样做:``在保存do self.full\u url=self.url end``之前,确保full\u url是一个已定义的列(甚至可以将url创建为列就足够了,我也不太使用rails)。无论如何,我认为在节省时间时为方法中的列设置一个值可能会满足您的需要。非常感谢您提供的信息。虽然我理解功能背后的原因,但从数据库的角度来看,我不想依赖Carrierwave进行所有交互,并保持将来使用其他解决方案以及直接与数据库交互或根据需要导入/导出数据的灵活性和自由度。你有解决这个问题的办法吗?非常感谢你。我对这里的细节不太熟悉(与carrierwaves更广泛的问题相比,我更熟悉fog本身)。我认为您可能会这样做:``在保存do self.full\u url=self.url end``之前,确保full\u url是一个已定义的列(甚至可以将url创建为列就足够了,我也不太使用rails)。无论如何,我认为在节省时间时为方法中的列设置一个值可能会满足您的需要。