我正在尝试在Heroku上安装gem'taglib-ruby'.这个gem编译为原生扩展,需要一个名为taglib的系统依赖,因此在通过heroku vulcan编译和上传之后,我实现了通过heroku bash上的命令行编译gem:
bundle exec gem install taglib-ruby -- --with-opt-dir=/app/vendor/taglib
Run Code Online (Sandbox Code Playgroud)
并且为了稍后捆绑器将使用此参数,我通过命令将其添加为捆绑器配置:
bundle config build.taglib-ruby '--with-opt-dir=/app/vendor/taglib'
Run Code Online (Sandbox Code Playgroud)
我已经验证了此配置已应用,检查文件/.bundle/config并查找BUNDLE_BUILD__TAGLIB-RUBY行.
然而,在将我的项目推送到heroku并且在执行bundle install命令时,heroku抱怨上面的gem(taglib-ruby)由于taglib库不存在而无法安装,尽管这是我试图解决的问题上面提到的选项'--with-opt-dir =/app/vendor/taglib'.
所以似乎Heroku忽略了捆绑器配置.
可能会发生什么?您是否知道在Heroku上实现相同意图(使用自定义构建选项安装gem)的另一种方式?
在此先感谢您的帮助.
我想在我的数据库中设置id3标签数据作为我的模型MasterSong的属性.具体来说,标题,艺术家和专辑.
create_table :master_songs do |t|
t.integer :user_id
t.has_attached_file :m_song
**- t.string :title
- t.string :artist
- t.string :album**
Run Code Online (Sandbox Code Playgroud)
在我的模型中,我使用回调来保存对象(master_song)之前的数据.
before_save :set_id3_tags_in_database
def set_id3_tags_in_database
TagLib::MPEG::File.open(self.m_song.path) do |file|
tag = file.id3v2_tag
tag.title
tag.album
tag.artist
end
self.update_attributes(:title => tag.title,
:artist => tag.artist,
:album => tag.album)
end
Run Code Online (Sandbox Code Playgroud)
我很确定我的语法是问题所在.该对象似乎遇到了错误
undefined method `title' for nil:NilClass with an infinite loop
Run Code Online (Sandbox Code Playgroud)
控制器创建动作是正常的:
def create
@master_song = current_user.master_songs.build(params[:master_song])
respond_to do |format|
if @master_song.save
format.html { redirect_to @master_song, notice: 'Master song was successfullycreated.' }
end
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?更新:def set_id3_tags z = …